Как убить процессы на удаленной машине *nix

Я хотел бы выполнить команду kill на многих машинах *nix. Я пытаюсь сделать что-то вроде этого:

rsh <remotemachine> ps -ef | grep <somepattern> | awk '{print $2}' | xargs n1 -t -i kill {}

Но это вызывает команду kill на локальном компьютере, а не на удаленном компьютере. Я также попробовал что-то вроде этого:

rsh <remotemachine> kill $(ps -ef | grep <somepattern> | awk '{print $2}')

Но это не работает для меня тоже.

4 ответа

Решение

Предполагая, что вы работаете на машинах, на которых он есть, вы также можете использовать более конкретную утилиту, такую ​​как pgrep или pkill. Это означает, что вам не нужно использовать grep, awk или xargs. Это немного упростит ситуацию.

http://linux.about.com/library/cmd/blcmdl1_pkill.htm

rsh "remotemachine" pkill независимо от процесса

ssh user@someserver "ps -ef | grep | awk '{print $2}' | xargs n1 -t -i kill {}"

Я отказываюсь использовать любой другой метод удаленной консоли, кроме SSH. Это также практически везде.

На всякий случай, я бы порекомендовал вам использовать SSH. RSH отправляет пароли в открытом виде, SSH намного безопаснее.

В любом случае вам понадобится экранировать символы, которые будет интерпретировать локальная оболочка. А именно эти трубы. И одинарные кавычки. И знак доллара. Я думаю, что с фигурными скобками все в порядке, но я, вероятно, буду параноиком и сделаю эти два. Невыполнение этого приводит к тому, что команда RSH передается только в первый канал, а затем вывод этой команды передается локально в grep, awk и т. Д.

Это та команда, которая раздражает. Попробуй это:

rsh <remotemachine> ps -ef \| grep <somepattern> \| awk \'\{print \$2\}\' \| xargs n1 -t -i kill \{\}


- Кристофер Карел

Это возможно на компьютере Windows с помощью taskkill, pskill или другой командой:) К сожалению, это невозможно на компьютере Linux/UNIX без использования ssh, rsh или другого инструмента удаленного сеанса.

Другие вопросы по тегам