首页 > 解决方案 > 不是每次脚本运行时都会触发一次事件

问题描述

我正在使用下面的脚本在 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

标签: bashconditional-statements

解决方案


您必须在脚本之外存储一些状态,以便在下一次独立运行时查看电子邮件已经发送。也许在主机关闭的情况下,您将文件放在某处。如果主机故障已经有一个文件并且它不是太旧,请跳过发送电子邮件。

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

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


推荐阅读