我正在寻找有关如何在未收到特定定期电子邮件的情况下自动接收警报(通过电子邮件最好)的想法。我不一定有权访问生成电子邮件的系统。
在最近的一个现实世界用例中,我有一份摘要报告,每天发送给大约六名技术人员和经理,提供数十个现场位置的系统状态。我们有第二个发送警报的通道,但是有很多维护问题只能通过查看此报告才能发现。
昨晚我发现生成报告的脚本几周前就停止工作了 - 没有人注意到。请在任何人花大量时间斥责那些没有注意到的人(这包括我)之前先了解一下,90% 到 100% 的相关人员都非常擅长他们所做的事情,并且确实关心,但都处于边缘的信息过载。我认为,当数十封通常不重要的电子邮件中的一封碰巧没有到达时,人们不会注意到这一点,这是人的本性。当它到来时,似乎确实会促使我们回顾它,并取得良好的结果,但没有到来——没有心理触发。我们注意到电子邮件并采取行动,但没有注意到电子邮件的缺乏并采取行动。
我当前的想法是将我想要监控的任何报告电子邮件发送到其他“看门狗”电子邮件地址。然后,我将拥有独立的机器 - 也许云中的几个 Raspberry Pi 或 VM 会接收电子邮件,并在长时间没有收到电子邮件的情况下发送警报。有点像电子邮件的看门狗计时器。
也许类似的东西已经存在,我只是没有正确的搜索词,有人可以向我指出这些信息,但我也对其他人如何处理它的任何建议感兴趣。现在我正朝着专门的脚本方向前进,但有兴趣使其更通用。
答案1
procmail
假设您可以使用这些工具,您可以通过和拼凑一些东西cron
。如果没有,任何可以在特定电子邮件到达时运行 shell 命令的东西都应该能够执行非常类似的操作。
首先,设置与您要监视的电子邮件相匹配的 procmail(或您使用的任何其他邮件过滤工具)规则和touch
监视程序文件。该c
标志使规则处理电子邮件的副本,并且即使存在匹配也继续处理;这样,电子邮件就不会丢失。
:0 c
*^Subject: Regular Report
| /usr/local/bin/regular-report-received.sh
然后将脚本写入touch
用户拥有的文件中,并将其保存为/usr/local/bin/regular-report-received.sh
以下情况:
#!/bin/bash
touch ~/.regular-report-received
(这可以在 procmail 规则内完成,但我喜欢将事情分开,所以就这样了。)
然后,您需要一个 cron 作业来定期检查以确保文件最近被修改过。例如,您可以为每个用户:
@daily /usr/local/bin/is-regular-report-received.sh
然后是/usr/local/bin/is-regular-report-received.sh
这样的
#!/bin/bash
STALE_IF_BEFORE=$(date --date='-36 hours' +%s)
FILE_TIMESTAMP=$(stat -c '%Y' ~/.regular-report-received)
test "${FILE_TIMESTAMP}" -gt "${STALE_IF_BEFORE}" || printf 'Report not received!\n'
完成此操作后,cron
如果每个用户在过去 36 小时内没有收到报告,则应在午夜向他们发送一封电子邮件。
调整口味。