Verifique los procesos de múltiples servidores en paralelo con la declaración if

Verifique los procesos de múltiples servidores en paralelo con la declaración if

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

información relacionada