for i in `cat hosts_list`; do RES=`ssh myusername@${i} "ps -ef " |awk '/[p]rocessname/ {print $2}'`; test "x${RES}" = "x" && echo $i; done
Команда for i in 'cat hosts_list'; do res=
ssh myusername@${i} «ps -ef » |awk ‘/[p]rocessname/ {print $2}’; test "x${res}" = "x" && echo $i; done
позволяет узнать, на каких хостах не запущен определенный процесс.
Эта команда использует цикл for
для перебора значений из файла hosts_list
. Для каждого хоста из списка команда выполняет SSH-соединение с указанным пользователем (myusername@${i}
) и выполняет команду ps -ef
для получения списка запущенных процессов. Затем утилита awk
используется для поиска процесса с заданным именем ([p]rocessname
), и если такой процесс не найден, то его PID ($2
) добавляется в переменную res
.
Далее, команда test "x${res}" = "x"
сравнивает значение переменной res
с пустой строкой. Если они равны, то выводится имя хоста $i
, что означает, что на этом хосте не запущен заданный процесс.
Альтернативным способом выполнения данной задачи может быть использование конфигурационного менеджера, например, Ansible или Puppet, который позволяет автоматизировать выполнение команд на удаленных хостах.