Как запускать команды надстройки по SSH?

У меня есть кластер компьютеров, которые подключены через SSH без пароля, и я написал утилиту, которая запускает команду над всем кластером. То, как это происходит, – это забрать машины, присутствующие в файле, зацикливаясь над ними, выполняя команду, указанную через SSH.

Теперь я хочу запустить команду kill над кластером. То, как я это делаю, – это grep 'ID процесса, а затем запустить команду kill следующим образом:

 kill -9 $(ps -ef | grep service_name | awk '{print $2}') 

Но когда я запускаю эту команду, она перебирает одну машину, выполняет команду, перебирает вторую машину и просто выходит, даже не выполняя команду. Таким образом, команда, наконец, заканчивается на одной машине.

Я немного почитал об этом и узнал, что команды cmd1 $(cmd2) запущенные через SSH, не выполняются должным образом.

Может ли кто-нибудь предоставить мне обходной путь.

4 Solutions collect form web for “Как запускать команды надстройки по SSH?”

Фактически замена команд, которая не просто подоболочка, отлично работает. Ваша проблема заключается в том, что вы хотите, чтобы она выполнялась в удаленной системе удаленной оболочкой, потому что процессы, которые вы хотите убить, – это процессы в удаленной системе. Поэтому вы должны процитировать его, что немного неуклюже, хотя вы можете сбросить grep когда у вас есть awk . Возможны два варианта:

 ssh user@remote "kill -9 \$(ps -ef | awk '/service_name/{print $2}')" ssh user@remote 'kill -9 $(ps -ef | awk "/service_name/{print \$2}")' 

Однако лучшим решением этой проблемы для большинства Linux и некоторых (?) Других Unix- pkill является pkill который выполняет всю работу по поиску процессов, выполняющих определенную команду, и убивает их:

 ssh user@remote pkill -9 service_name 

В зависимости от того, как запущен процесс, вам может потребоваться выполнить поиск в полной командной строке:

 ssh user@remote pkill -f -9 service_name 

Ты не будешь травить греп в awk!

 ps -ef | awk '/service_name/ { print $2}' | xargs kill -9 

или

 pkill service_name 

Пытаться:

 ps -ef | grep service_name | awk '{print $2}' | xargs kill -9 

Возможно, вы захотите проверить его в первую очередь.

Я завернул команду kill -9 $(ps -ef | awk "/service_name/{print \$2}") символом “ и запустил ее с помощью моей утилиты, и это сработало как шарм. Итак, ниже приведена последняя команда:

 `kill -9 $(ps -ef | awk "/service_name/{print \$2}")` 
  • Каковы все способы создания подоболочки в bash?
  • Буфер обмена VNC не работает
  • Как установить Cols и Lines для подпроцесса
  • zsh: подстановка команды не наследует stdin из родительского
  • Заполнение вкладки Bash происходит не в подстановке команд
  • Как передать PID одного процесса другому процессу в том же сценарии оболочки?
  • Как войти в удаленную учетную запись пользователя с помощью пароля и выполнить набор команд?
  • выйти из сценария оболочки из подоболочки
  • фигурные скобки и подоболочка
  • Как выполнить bash (в скрипте) с собственным файлом .bash_logout?
  • Невозможно grep список заданий, когда задания, вызванные функцией
  • Linux и Unix - лучшая ОС в мире.