Tengo una función bash que verifica si hay algún proceso ejecutándose en los servidores leyendo sus IP de un archivo de texto uno por uno.
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 contiene pocas ips de servidor
202.X.X.X
203.X.X.X
204.X.X.X
...
...
...
Quiero modificar esta función para verificar el proceso que se ejecuta en varios servidores en paralelo
Respuesta1
Con GNU Parallel puedes hacer:
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
Respuesta2
¿Qué pasa con la ejecución del contenido del bucle en 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