Я могу запускать команды параллельно на списке машин, используя pssh
команду. Например, чтобы создать папку foo
на нескольких машинах, перечисленных в hosts.txt
я могу запустить:
pssh -h hosts.txt -l MyUserName "mkdir foo"
Но поскольку команда требует больше аргументов (например, использование открытого ключа для аутентификации и т. д.), я попытался создать следующий скрипт bash bar.sh
, в котором команда, которую я хочу выполнить, просто указывается в качестве аргумента скрипта:
#!/bin/bash
pssh -h hosts.txt -l MyUserName "$@"
Но запуск bar.sh mkdir foo
зависает терминал, даже я не могу его убить с помощью Ctrl+C.
Есть идеи?
решение1
Я не слишком хорошо знаком с pssh
. Вы получаете ту же ошибку, если используете GNU Parallel:
#!/bin/bash
parallel -j10 --slf hosts.txt --nonall "$@"
Введите имя пользователя в hosts.txt:
myuser@host1
myuser@host2
решение2
Необходимо использовать -i (встроенный агрегированный вывод и ошибки для каждого сервера), следующее будет работать:
pssh -h pssh.txt -l root -i uptime