因此我设置了一个简单的脚本,当某个 Web 服务停止运行时发送电子邮件警报。
它有一个简单的流程:
test = $( curl [address] | grep [a certain string in response] | wc -l )
if [ $test -ne 1 ]; then
echo "there has been an error" | mail -s "Error" -t "[my-mail-address]"
fi
并在 crontab 中设置为每五分钟检查一次:
*/5 * * * * sh /path/to/script/
几天来它运行良好,但大约十分钟前突然从服务器同时收到了近百封电子邮件。这似乎根本不可能,因为脚本中甚至没有任何循环。
系统日志:
Jan 26 01:05:01 sv1 CRON[23310]: (munin) CMD (if [ -x /usr/bin/munin-cron ]; then /usr/bin/munin-cron; fi)
Jan 26 01:10:01 sv1 CRON[23815]: (munin) CMD (if [ -x /usr/bin/munin-cron ]; then /usr/bin/munin-cron; fi)
Jan 26 01:12:12 sv1 kernel: [5962667.417178] [ 1106] 0 1106 5914 168 17 0 0 cron
Jan 26 01:12:12 sv1 kernel: [5962667.417250] [27493] 0 27493 14949 224 34 0 0 cron
Jan 26 01:12:12 sv1 kernel: [5962667.417252] [27939] 0 27939 14949 224 34 0 0 cron
Jan 26 01:12:12 sv1 kernel: [5962667.417254] [28436] 0 28436 14948 224 34 0 0 cron
Jan 26 01:12:12 sv1 kernel: [5962667.417256] [28943] 0 28943 14949 224 34 0 0 cron
Jan 26 01:12:12 sv1 kernel: [5962667.417258] [29408] 0 29408 14949 224 34 0 0 cron
...
* 这种情况持续了大约 800 多行,时间戳相似(直到 01:12:24)。这 800 多行的时间戳与同时发送的邮件一致。这很奇怪,因为 cron 计划每 5 分钟运行一次,因此是前两行。从 01:12:12 开始的几行很可疑。
更新:
只需再次关闭服务并让 cron 和脚本执行其工作即可。已发送一封邮件。
由于测试是一个非常简单的真/假,我很难弄清楚什么样的特殊情况会导致多封邮件同时发送。
答案1
你确定吗It was working well for a couple of days....
?这意味着每 5 分钟发送一封邮件。
有可能邮件因某种原因无法发送,导致邮件排队,当连接问题解决后,所有邮件都已发送。为了找到问题,应该检查邮件日志。
应该调试 cron. 检查 syslog 和 cronlog:
sudo less /var/log/cron
在发送 124 封邮件时应该可以找到一些有关 cron 的信息。
另请检查此问答如果系统太忙,可以归结为 cron 作业,然后应该考虑使用守护进程。
检查 的输出curl [address] | grep [a certain string in response] | wc -l
。命令执行是否需要很长时间?为什么 grep 所有相似之处?第一次命中应该就足够了。| 头 -1可用于。