一次发送 124 封电子邮件,而如果某个 Web 服务停止运行,则应每五分钟通过 cron 发送一封电子邮件

一次发送 124 封电子邮件,而如果某个 Web 服务停止运行,则应每五分钟通过 cron 发送一封电子邮件

因此我设置了一个简单的脚本,当某个 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可用于。

相关内容