如果某个Web服务停止运行,应该每隔五分钟由cron发送一次124个电子邮件

所以我build立了一个简单的脚本,在某个Web服务停止运行时发送电子邮件警报。

它有一个简单的stream程:

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和脚本做他们的工作。 一封邮件已发送。

由于testing是一个非常简单的真实/错误,我正在努力弄清楚什么样的特殊情况会导致多个邮件被同时发送。

你确定It was working well for a couple of days.... ? 这意味着邮件每5分钟发送一次。

可能由于某种原因邮件不能被发送而导致队列,并且当连接问题被解决时,所有的邮件都被发送。 为了find问题,应该检查邮件日志。

cron应该被debugging 。 检查系统日志和cronlog:

 sudo less /var/log/cron 

关于cron的一些信息应该在124封邮件发送的时候find。

另外检查这个问答 。 如果一个系统太忙,cron可以总结出来,然后应该考虑一个守护进程。

检查curl [address] | grep [a certain string in response] | wc -l的输出 curl [address] | grep [a certain string in response] | wc -l curl [address] | grep [a certain string in response] | wc -l 。 命令执行需要很长时间吗? 为什么你会grep所有的相似之处? 第一击应该足够了。 | 头-1可以使用。