if 문으로 여러 서버의 프로세스를 병렬로 확인

if 문으로 여러 서버의 프로세스를 병렬로 확인

텍스트 파일에서 IP를 하나씩 읽어 서버에서 실행 중인 프로세스가 있는지 확인하는 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

답변2


루프의 내용을 백그라운드에서 실행하는 것은 어떻습니까?

  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

관련 정보