웹사이트의 지속적인 테스트를 위한 스크립트를 개선해야 합니다.

웹사이트의 지속적인 테스트를 위한 스크립트를 개선해야 합니다.

웹사이트의 지속적인 테스트를 위한 스크립트를 개선해야 합니다.

현재 다음 스크립트를 사용하고 있지만 웹 사이트가 계속 실행되는 동안 많은 이메일 실패가 발생합니다.

#!/bin/bash
while true; do
    date > wsdown.txt ;
    cp /dev/null pingop.txt ;
    ping -i 1 -c 1 -W 1 website.com > pingop.txt ;
    sleep 1 ;
    if grep -q "64 bytes" pingop.txt ; then
        :
    else
        mutt -s "Website Down!" [email protected] < wsdown.txt ;
        sleep 10 ;
    fi
done

이제 이 스크립트를 어떤 방식으로든 고려하거나 개선하거나 다른 접근 방식을 사용하십시오.

답변1

;각 줄의 끝에 있을 필요는 없습니다 . 이것은 C가 아닙니다.

다음은 필요하지 않습니다:

cp /dev/null pingop.txt

왜냐하면 스크립트의 다음 줄은

ping -i 1 -c 1 -W 1 google.com > pingop.txt

어쨌든 내용을 덮어쓰게 됩니다 pingop.txt. ping나중에 보내거나 처리할 계획이 없다면 출력을 파일에 저장할 필요조차 없습니다. 다음을 수행하세요 .

if ping -i 1 -c 1 -W 1 website.com >/dev/null 2>&1
then
    sleep 1
else
    mutt -s "Website Down!" [email protected] < wsdown.txt
    sleep 10

잘못된 긍정에 대한 질문에 답변하는 것은 ping아마도 웹사이트가 제대로 작동하는지 테스트하는 가장 좋은 방법은 아닐 것입니다. 일부 웹사이트는 ICMP 요청에 응답하지 않습니다. 예를 들면 다음과 같습니다.

$ ping -i 1 -c 1 -W 1 httpbin.org
PING httpbin.org (3.222.220.121) 56(84) bytes of data.

--- httpbin.org ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

하지만 http://httpbin.org이미 일어났습니다. website.com예제를 사용하는 경우 HTTP/HTTPS를 통해 액세스할 가능성이 높습니다. 이 경우 다음을 사용하는 것이 좋습니다 curl -Is.

$ curl -Is "httpbin.org" >/dev/null  2>&1
$ echo $?
0
$ curl -Is "non-existing-domain-lalalala.com" >/dev/null  2>&1
$ echo $?
6

OP는 댓글에서 ping. curl다음에 응답하는 웹사이트를 테스트하는 경우에는 큰 차이가 없습니다 ping.

$ time curl -Is google.com >/dev/null  2>&1
real    0m0.068s
user    0m0.002s
sys     0m0.001s
$ time ping -i 1 -c 1 -W 1 google.com
PING google.com (216.58.215.110) 56(84) bytes of data.
64 bytes from waw02s17-in-f14.1e100.net (216.58.215.110): icmp_seq=1 ttl=54 time=8.06 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 8.068/8.068/8.068/0.000 ms
real    0m0.061s
user    0m0.000s
sys     0m0.000s

그러나 응답하지 않는 웹사이트를 테스트할 때 pingthen은 현재 사용 중인 핑 curl 보다 더 안정적일 뿐만 아니라 더 빠릅니다 .-W

$ time ping -i 1 -c 1 -W 1 httpbin.org
PING httpbin.org (3.222.220.121) 56(84) bytes of data.

--- httpbin.org ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms


real    0m1.020s
user    0m0.000s
sys     0m0.000s
$ time curl -Is httpbin.org  >/dev/null  2>&1

real    0m0.256s
user    0m0.003s
sys     0m0.000s

답변2

개선의 여지가 별로 없음평평한버전

#!/bin/bash
while true; do
    date > wsdown.txt  
    ping -i 1 -c 1 -W 1 website.com > pingop.txt # '>' will overwrite file
    sleep 1 ;
    if ! grep -q "64 bytes" pingop.txt ; then ## negate test
        mutt -s "Website Down!" [email protected] < wsdown.txt 
        sleep 10 
    fi
done

알아채다

  • ;"닫기" 명령이 필요하지 않습니다.
  • 문제가 발생 하면 website.com스팸을 많이 받을 수 있습니다.
  • ping(icmp)과 http://는 서로 다른 두 가지 프로토콜입니다.

답변3

다음과 같이 명령 타이밍을 늘릴 수 있습니다 ping. 이렇게 하면 응답 시간이 늘어나지만 손실도 줄일 수 있습니다.

~에서ping -i 1 -c 1 -W 1 website.com > pingop.txt ;

도착하다ping -i 2 -c 1 -W 4 website.com > pingop.txt ;

관련 정보