![if 문을 사용하여 여러 서버의 프로세스를 병렬로 확인하십시오.](https://linux55.com/image/154766/if%20%EB%AC%B8%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%AC%EB%9F%AC%20%EC%84%9C%EB%B2%84%EC%9D%98%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EB%B3%91%EB%A0%AC%EB%A1%9C%20%ED%99%95%EC%9D%B8%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
텍스트 파일에서 서버의 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