Prozesse mehrerer Server parallel mit if-Anweisung prüfen

Prozesse mehrerer Server parallel mit if-Anweisung prüfen

Ich habe eine Bash-Funktion, die prüft, ob auf Servern Prozesse ausgeführt werden, indem sie deren IPs einzeln aus einer Textdatei liest

  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 enthält einige Server-IPs

202.X.X.X
203.X.X.X
204.X.X.X
...
...
...

Ich möchte diese Funktion ändern, um den Prozess zu überprüfen, der auf mehreren Servern parallel läuft

Antwort1

Mit GNU Parallel können Sie Folgendes tun:

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

Antwort2


Wie wäre es, den Inhalt der Schleife im Hintergrund auszuführen?

  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

verwandte Informationen