Shell-Script

需要改進持續測試網站的腳本

  • October 9, 2019

需要改進不斷測試網站的腳本。

目前已使用以下腳本,但它提供了大量失敗的電子郵件,而網站仍在執行:

#!/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!" bruno.bvaraujo@gmail.com < wsdown.txt ;
       sleep 10 ;
   fi
done

現在考慮或以某種方式改進此腳本或使用其他方式。

您不需要;在每一行的末尾,這不是 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!" bruno.bvaraujo@gmail.com < 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詢問評論之間pingcurl評論中的速度差異。如果您正在測試響應以下內容的網站,則沒有太大區別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不僅比您現在使用curl 的 ping 更可靠而且更快-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

引用自:https://unix.stackexchange.com/questions/543085