웹사이트의 지속적인 테스트를 위한 스크립트를 개선해야 합니다.
현재 다음 스크립트를 사용하고 있지만 웹 사이트가 계속 실행되는 동안 많은 이메일 실패가 발생합니다.
#!/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
그러나 응답하지 않는 웹사이트를 테스트할 때 ping
then은 현재 사용 중인 핑 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 ;