Verifique processos de vários servidores em paralelo com a instrução if

Verifique processos de vários servidores em paralelo com a instrução if

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

informação relacionada