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

실행시 호스트가 사용 가능해질 때까지 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 

Answer

간단한 한 줄짜리를 사용합니다.

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

를 핑하려는 호스트와 연결합니다.


백그라운드에 두는 부분을 놓쳤습니다. 그 줄을 다음과 같이 쉘 스크립트에 넣습니다.

#!/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 & 

다시

핑하려는 호스트와 연결하십시오. 이 접근 방식에서는 호스트 이름을 쉘 스크립트에 대한 인수로 전달합니다.

일반적인 경고처럼, 호스트가 중단되면이 스크립트를 종료하거나 종료 할 때까지 백그라운드에서 계속 ping을 수행하게됩니다. 호스트를 찾았습니다. 그래서 나는 이것을 실행할 때 명심할 것입니다. 이것을 잊어 버리면 결국 시스템 리소스를 먹게 될 수 있기 때문입니다.

댓글

  • 답변과 경고를위한 Tnx, 이것은 시각화 된 환경입니다. 따라서 스크립트는 물리적 서버 부팅 후에 시작되므로 VM '이 확실히 시작되지만 VM을 삭제하면 다시 tnx를 염두에 두어야합니다.
  • 특히 매번 실패를 기록하고 모든 출력을 /tmp의 파일에 저장하여 호스트가 다운되는 경우 ' ll 결국 /tmp를 채 웁니다. 안 좋은 소식입니다 …

답변

매개 변수 “-c 30″을 핑, 30 핑을 시도하고 중지합니다. 명령이 성공했는지 확인합니다. 하나의 핑을 포함하는 루프를 수행 하고이 핑이 성공하는지 확인하는 것이 가장 좋습니다. 다음과 같은 것 :

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

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

댓글

  • 다른 작업을 수행 할 수 있도록 프롬프트를 잠금 해제하여 tnx에서 도움을 요청

답변

이전 게시물이지만 핑에 대한 -w 옵션을 사용할 수 있습니다. 루프를 피하십시오. 예를 들어

ping -w 30 -c 1 host 

는 초당 1 개의 핑으로 30 초 동안 시도하고 (기본 핑은 핑 사이에 1 초 간격이 있음) 첫 번째 성공한 핑에서 종료됩니다. .

시간 초과가 필요하지 않은 경우, 즉 계속 기다립니다. -w에 매우 큰 값을 사용하세요.

답변

ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh 
  • ping -oping 첫 번째 패킷 수신 후
  • > /dev/null 출력을 리디렉션하므로 표시되지 않습니다.
  • &&는 이전 명령이 성공하면 다음 명령을 실행합니다.

또한 다음을 통해 백그라운드에서 모든 프로세스를 실행할 수 있습니다. 끝에 & 추가; 예를 들어 echo "123" &는 백그라운드에서 실행됩니다.

Answer

여기에서 작동합니다. 스크립트 수정.

#!/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 개를 핑하게됩니다. 스크립트가 다음 줄로 이동하기 전에 몇 번입니다. 스크립트를 더 빠르게 실행하기 위해 -c1를 사용합니다.

-i는 각 패킷을 보내는 사이에 몇 초 동안 대기하는 것입니다. 따라서 -i3는 3 초를 기다리는 것입니다. 스크립트 실행 속도를 높이기 위해 -i를 제거합니다.

마지막으로 코드가보기 좋고 읽기 쉽게 보이도록 들여 쓰기를 사용합니다.

샘플 출력

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

답변

#!/bin/sh if [ $1 ] then for i in ` cat $1` do VAR1=$(ping -ac 2 $i| grep -c error) if [ $VAR1 == "0" ] then echo " valid : $i" else echo " invalid : $i" fi done else echo " please present the file name. example: pong /tmp/a " fi 

댓글

  • 설명하는 단어를 추가하려면 …?

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다