if ステートメントを使用して、複数のサーバーのプロセスを並列に確認します。

if ステートメントを使用して、複数のサーバーのプロセスを並列に確認します。

テキストファイルからサーバーのIPを1つずつ読み取り、サーバーに実行中のプロセスがあることを確認するbash機能があります。

  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 にはサーバー IP がほとんど含まれていません。

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

複数のサーバーで同時に実行されるプロセスを確認するために、この機能を変更したいと思います。

ベストアンサー1

GNU Parallelでは、次のことができます。

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

おすすめ記事