Se você quiser ssh para vários hosts em paralelo, use um programa como pdsh (Parallel Distributed Shell).
Por exemplo, se seu ip.txt contiver endereços IP em vez de nomes de host ou uma combinação de nomes de host & Endereços IP:
hosts="$(awk '{l = l","$0}; END {sub(/^,/,"",l); print l}' ip.txt)"
while pdsh -l ubuntu -w "$hosts" 'pgrep -f pattern' 2>/dev/null |
grep pattern ; do
sleep 10
done
Isso usa awk para criar uma lista de endereços IP separados por vírgulas para se conectar com ssh .
Se o arquivo ip.txt contiver nomes de host somente em vez de endereços IP, é muito mais simples:
while pdsh -l ubuntu -F ./ip.txt -a 'pgrep -f pattern' 2>/dev/null |
grep pattern ; do
sleep 10
done
Ambos pressupõem que ip.txt tenha um endereço IP ou nome de host por linha.
O loop while é executado até que nenhum dos hosts produza qualquer saída que corresponda ao padrão. stderr do comando pdsh é redirecionado para / dev / null para evitar spam no terminal com mensagens de erro quando o comando pgrep retorna o código de saída 1 para pdsh .
A única saída é do grep pattern no pipeline. Use grep -q pattern se você quiser isso silenciado também.