我正在使用以下脚本,当myhost关闭时会通过电子邮件收到通知。
我每分钟都会在crontab中运行此脚本。
问题:只要我的主机关闭,它就会在每分钟提醒我主机已关闭(每分钟由crontab触发)。
我想做什么:
当我的主机关闭时,我只希望收到一次警报。因此,如果主机宕机30分钟,我希望收到一次警报而不是30次。
当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
答案 0 :(得分:1)
您必须在脚本之外存储一些状态,才能在下一次独立运行中查看电子邮件已经发送。也许在主机关闭的情况下,您将文件放在某个位置。如果主机关闭,则已经有一个文件,并且文件不太旧,请跳过发送电子邮件的步骤。
不可能在脚本中封装状态(可能是一个标志),因为在每次执行(通过cron)时,这将是脚本的新实例,具有自己的变量。
另一件事:while
循环是多余的。该循环将始终在第一次迭代时退出。