Eu tenho uma função bash que verifica se há algum processo em execução nos servidores lendo seus IPs de um arquivo de texto, um por um
while read IP
do
if [ 1 -eq "$(echo "$(ssh -n ubuntu@$IP "top -b -n2 -d 0.5|grep Cpu|awk '{print \$2+\$4}'|tail -n1") > 1.0" | bc)" ];then
echo "process is running on $IP"
else
echo "process is not running on $IP"
fi
done < file.ips
file.ips contém alguns ips de servidor
202.X.X.X
203.X.X.X
204.X.X.X
...
...
...
Quero modificar esta função para verificar o processo em execução em vários servidores paralelamente
Responder1
Com o GNU Parallel você pode fazer:
check() {
IP="$1"
if [ 1 -eq "$(echo "$(ssh -n ubuntu@$IP "top -b -n2 -d 0.5|grep Cpu|awk '{print \$2+\$4}'|tail -n1") > 1.0" | bc)" ];then
echo "process is running on $IP"
else
echo "process is not running on $IP"
fi
}
export -f check
parallel -j0 check < file.ips
Responder2
Que tal executar o conteúdo do loop em segundo plano?
while read IP
do
(if [ 1 -eq "$(echo "$(ssh -n ubuntu@$IP "top -b -n2 -d 0.5|grep Cpu|awk '{print \$2+\$4}'|tail -n1") > 1.0" | bc)" ];then
echo "process is running on $IP"
else
echo "process is not running on $IP"
fi) &
done < file.ips