并非每次脚本运行时都会触发一次事件

时间:2019-09-21 12:50:32

标签: bash conditional-statements

我正在使用以下脚本,当myhost关闭时会通过电子邮件收到通知。

我每分钟都会在crontab中运行此脚本。

问题:只要我的主机关闭,它就会在每分钟提醒我主机已关闭(每分钟由crontab触发)。

我想做什么:

  1. 当我的主机关闭时,我只希望收到一次警报。因此,如果主机宕机30分钟,我希望收到一次警报而不是30次。

  2.  2。

当myhost再次启动时,我想再次发出警报,通知myhost又回来了。

谢谢。

#!/bin/bash
ping -c 1 www.myhost.com > /dev/null 2>&1
status=$?
while true;
do

if [ "$status" -eq 0 ]; then
 echo "OK"
 exit 0
else
 #echo "Ping NOK"
 echo "myhost is down" | /usr/bin/mail -s "It happened: myhost is down" myaddr@gmail.com
 exit 1
fi
done

1 个答案:

答案 0 :(得分:1)

您必须在脚本之外存储一些状态,才能在下一次独立运行中查看电子邮件已经发送。也许在主机关闭的情况下,您将文件放在某个位置。如果主机关闭,则已经有一个文件,并且文件不太旧,请跳过发送电子邮件的步骤。

不可能在脚本中封装状态(可能是一个标志),因为在每次执行(通过cron)时,这将是脚本的新实例,具有自己的变量。

另一件事:while循环是多余的。该循环将始终在第一次迭代时退出。