У меня есть большое количество Linux серверов для обслуживания. Часто мне нужно запустить скрипт ( script. sh) на всех из них, чтобы получить статус работоспособности, этот сценарий обычно выводит около 30-40 секунд. Чтобы облегчить задачи обслуживания, я пишу сценарий оболочки, который использует S SH до l oop через все удаленные хосты, запускаю скрипт. sh, собираю вывод и записываю его в файл журнала на моем локальном хосте. Ради этого вопроса я назвал этот скрипт MyScript. sh
Скрипт работает нормально, однако он должен ждать, пока вывод S SH продолжит следующий хозяин. Поскольку у меня слишком много серверов, и команды выполняются последовательно, для завершения sh требуется несколько минут. Я бы хотел провести l oop через все серверы параллельно, не ожидая ответа от каждого хоста.
Есть ли способ удаленного запуска скрипта. sh одновременно на всех хостах с использованием MyScript. sh? Может быть, запустить команду s sh в фоновом режиме и каким-то образом собрать вывод?
Вывод скрипта. sh - это одна строка, разделенная каналами. Например:
host1|49 days|10%|3.77%|27677/63997 MB|43% - /usr|38% - /usr|Optimal|No|40%|No
Вывод Myscript. sh - это объединение выводов всех узлов без каналов.
Date Hostname Uptime CPU I/O Free MEM File System INODES STATUS WWW YYY ZZZ XXX
===================================================================================================================================================================================================
01/31/20 host1 44 days 5% 10.33% 38083/64000 MB 57% - / 37% - /usr OPTIMAL No 40% No
01/31/20 host2 45 days 11% 1.79% 27915/63997 MB 43% - /usr 38% - /usr OPTIMAL UP 7% OK
01/31/20 host3 45 days 2% 1.89% 32145/63997 MB 43% - /usr 38% - /usr OPTIMAL UP NO OK
01/31/20 host4 45 days 11% 3.72% 52477/128637 MB 49% - /var 38% - /usr OPTIMAL UP 8% OK
01/31/20 host5 45 days 6% 3.21% 65264/128637 MB 46% - /var 38% - /usr OPTIMAL UP NO OK
01/31/20 host6 45 days 7% 5.79% 56369/63997 MB 43% - /usr 38% - /usr OPTIMAL UP NO No
01/31/20 host7 45 days 6% 1.66% 56391/63997 MB 43% - /var 38% - /usr OPTIMAL UP NO No
Ядро MyScript. sh выглядит следующим образом:
(
for ip in $IP_LIST;
do
echo "Checking $ip"
ssh -q -t $user@$ip 'sudo /tmp/script.sh' > /tmp/$$
current_date=$(date +%D)
printf "%-10s " "$current_date" >> $logfile
while read line;
do
echo $line | awk -F '|' '{printf("%-10s %-10s %-7s %-8s %-18s %-25s %-25s %-15s %-15s %-25s %-10s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11); }' >> $logfile
done< /tmp/$$
done
)
Итак, я хотел бы оптимизировать этот сценарий для одновременного запуска вышеуказанного кода на нескольких серверах. Спасибо!