호스트 가용성을 확인하기 위한 Bash ping 스크립트 파일

호스트 가용성을 확인하기 위한 Bash ping 스크립트 파일

실행 시 호스트가 사용 가능해질 때까지 핑을 시작하고, 호스트에 액세스할 수 있게 되면 명령을 실행하고 실행을 중지하는 bash 스크립트를 파일에 작성하려고 합니다. 스크립트를 작성하려고 했지만 스크립트는 카운트가 종료되고,

그리고 프로세스를 백그라운드에 넣어야 하는데 $달러() 기호를 사용하여 스크립트를 실행하면 여전히 포그라운드에서 실행되고,

#!/bin/bash
ping -c30 -i3 192.168.137.163
if [ $? -eq 0 ]
then /root/scripts/test1.sh
exit 0
else echo “fail”
fi

답변1

나는 이것을 간단한 한 줄로 사용하겠습니다.

while ! ping -c1 HOSTNAME &>/dev/null; do echo "Ping Fail - `date`"; done ; echo "Host Found - `date`" ; /root/scripts/test1.sh

HOSTNAME핑하려는 호스트로 바꾸십시오 .


백그라운드에 넣는 부분을 놓쳤습니다. 해당 줄을 다음과 같이 쉘 스크립트에 넣으십시오.

#!/bin/sh

while ! ping -c1 $1 &>/dev/null
        do echo "Ping Fail - `date`"
done
echo "Host Found - `date`"
/root/scripts/test1.sh

백그라운드로 만들려면 다음과 같이 실행할 수 있습니다.

nohup ./networktest.sh HOSTNAME > /tmp/networktest.out 2>&1 &

HOSTNAME핑하려는 호스트로 다시 교체하십시오 . 이 방법에서는 호스트 이름을 쉘스크립트에 매개변수로 전달합니다.

일반적인 경고로서, 호스트가 다운되면 호스트를 종료하거나 찾을 때까지 이 스크립트가 백그라운드에서 계속 ping을 수행하게 됩니다. 그래서 나는 당신이 이것을 실행할 때 그것을 명심할 것입니다. 이를 잊어버리면 시스템 리소스가 부족해질 수 있기 때문입니다.

답변2

ping에 매개변수 "-c 30"을 전달하면 30번의 ping을 시도하고 중지됩니다. 명령이 성공했는지 확인합니다. 내 생각에는 ping이 포함된 루프를 수행하고 이 ping이 성공했는지 확인하는 것이 더 낫다고 생각합니다. 이 같은:

while true;
do
  ping -c1 google.com
  if [ $? -eq 0 ]
  then 
    /root/scripts/test1.sh
    exit 0
  fi
done

여전히 포그라운드에서 실행 중이라면 터미널에서 여전히 인쇄 중이라는 의미이며 stdin 및 stdout을 /dev/null로 리디렉션할 수 있습니다.

답변3

ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh 
  • ping -oping첫 번째 패킷을 받은 후 종료
  • > /dev/null출력이 보이지 않도록 리디렉션
  • &&이전 명령이 성공하면 다음 명령이 실행됩니다.

또한 프로세스 끝에 추가하여 백그라운드에서 &프로세스를 실행할 수 있습니다.echo "123" &

답변4

이는 스크립트의 작업 수정입니다.

#!/bin/bash
ping -c1 10.1.1.23 > /dev/null
if [ $? -eq 0 ]
  then 
    echo ok 
    exit 0
  else
    echo “fail”
fi

/dev/null화면에 나타나지 않도록 출력을 로 보내야 합니다 .

-c계산을 위한 것입니다. 를 입력하면 -c30스크립트가 다음 줄로 이동하기 전에 30번의 ping을 수행해야 합니다. 나는 -c1스크립트를 더 빠르게 실행하는 데 사용합니다.

-i각 패킷을 보내는 사이에 몇 초를 기다리는 것입니다. 그러니 -i33초만 기다리세요. -i스크립트를 더 빠르게 실행하기 위해 제거했습니다 .

마지막으로 들여쓰기를 사용하면 코드가 더 보기 좋고 읽기 쉬워집니다.

샘플 출력

user@linux:~$ ./script.sh 
ok
user@linux:~$

user@linux:~$ ./script.sh 
“fail”
user@linux:~$ 

관련 정보