Как запускать команды надстройки по 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 с фигурными фигурными скобками
  • zsh: подстановка команды не наследует stdin из родительского
  • Буфер обмена VNC не работает
  • Почему (echo ""; exit 1) не выходит из сценария?
  • Экспортируйте vars env в окно tmux windows / сессии / панели
  • Как установить Cols и Lines для подпроцесса
  • Каковы все способы создания подоболочки в bash?
  • Каковы накладные расходы на использование подоболочек?
  • Использование подоболочки для передачи параметров с пробелами
  • Как выполнить bash (в скрипте) с собственным файлом .bash_logout?
  • Как передать PID одного процесса другому процессу в том же сценарии оболочки?
  • Interesting Posts

    Как использовать внешний аппаратный RNG во FreeBSD?

    Как установить Acrotex в Debian для TeXLive?

    Обработка переменных sed с помощью путей в них?

    Сбой сетевого интерфейса после отключения этого провода или перезапуска службы

    Работает nfs для tcp, но не над udp

    Безопасно ли редактировать ~ / .bash_history «вживую»?

    Как разрешить www-data создавать папку, не предоставляя доступ для чтения к родительской папке

    Как я могу загрузить DragonFly BSD (HAMMER) с GRUB 2 на диске MBR?

    Debian Jessie нарушает зависимость: Следующие пакеты были сохранены: librtmp1

    Linux (debian / testing) не может загрузиться после установки ядра 3.9.1

    <untunct> процессы остаются позади

    Использовать vimrc другого пользователя, а также папку vim

    Игнорировать изменяемый размер «df -h» при использовании diff

    Невозможно убедить Thunderbird открывать ссылки во всем, кроме Firefox, на ArchLinux

    почему я получаю «причина: этот сервер не требует аутентификации» в xpra

    Linux и Unix - лучшая ОС в мире.