In what scenarios port being used by a process don't show up in netstat -a output.
Si todo funciona correctamente, nunca. Como se mencionó anteriormente, podría reemplazar su número de puerto por el nombre del servicio como se indica en /etc/services
.
El uso de netstat -na
garantiza que los puertos de servicio no se traduzcan a nombres de servicio.
logdir=`mktemp -d`
bunch=200
IFS=$'\n'
for hosts in $(< hosts.lst xargs -r -L "$bunch"); do
IFS=" ";
for host in $hosts; do
ssh -n -o BatchMode=yes "$host" './runScript.sh' 1>"$logdir/$host.log" 2>&1 &
done
wait
done
Предполагая, что тысячи (тысячи) хостов перечислены одна / строка в файле hosts.lst
, а затем из них за один раз выбирается группа (200), и на каждом из этих 200 хостов создается ваш runScript.sh
с использованием ssh
в пакетном режиме
и в то же время с сохранением stdout + stderr
извергается из каждого из этих фоновых заданий в файл с именем host
в каталоге $ logdir
, который может быть исследован по мере необходимости.
Наконец, мы ждем завершения одной группы перед запуском следующей группы с помощью команды wait
в конце внутреннего цикла for
.
Следующая модификация вашего скрипта, не требующая каких-либо других утилит, будет выполняться параллельно, но может иметь ограничения в зависимости от ограничений ваших хостов на дескрипторы открытых файлов:
for f in $(cat host.lst); do
./runScript.sh $f &
done
Для записи результатов в журнал , просто добавьте > run.log
после done
, чтобы сохранить в новый файл, run.log
.
Ключевым изменением является добавление &
, которые запускают процесс в фоновом режиме, а не ожидают его завершения перед выполнением следующей команды.