需要改进持续测试网站的脚本

需要改进持续测试网站的脚本

需要改进持续测试网站的脚本。

目前已使用以下脚本,但它给出了大量失败的电子邮件,而网站仍在运行:

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

但是,当测试不响应的网站时,pingthencurl 不仅比-W您现在使用的 ping 更可靠而且更快:

$ 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 ;

相关内容