如何在脚本未运行时收到通知

时间:2010-10-12 01:39:46

标签: linux bash

我有一个在一台机器上运行的bash脚本(称为lazyguy),通常是关闭的。每天晚上,lazyguy在BIOS中编程的已知时间唤醒,进行大量处理并将数据插入其Postgres数据库。然后,它进入睡眠状态(数据库和所有)。

如何在脚本未运行时收到通知?理想情况下,如果没有向数据库中插入任何内容,或者脚本以非零返回值退出,我希望收到电子邮件通知。我肯定需要检查这两个条件,以防lazyguy忽略了他的警报并且睡觉了。

我有另一台机器(taskmaster),它一直在运行,但资源有限。一些想法:

  • 让lazyguy向taskmaster发送某种消息,表明他完成了他的家务(可能插入了一些行数)。然后,taskmaster将在特定时间每天检查他的报告。如果它不在那里,给我发电子邮件,我会发送抨击懒惰的人。

  • 使用WakeOnLan数据包直接让taskmaster唤醒lazyguy,等待两分钟,通过ssh运行脚本,并检查当天数据库中的行数。如果发生任何问题,请给我发电子邮件。

哪种方法更好?有更简单的方法吗?你会使用哪种技术?我想也许是crontab,mailx,logger和rsyslog的混合体。

4 个答案:

答案 0 :(得分:1)

我更喜欢你的第一个更分散的方法(例如,lazyguy会在成功作业后在taskmaster上运行的简单HTTP服务器上做一些请求,服务器会更新存储在磁盘上的时间戳,这将由cron脚本检查) ,但第二个有一个优势 - 当你决定改变lazyguy调度(以及检查调度)时,你可以从一个地方 - taskmaster。

答案 1 :(得分:1)

我很惊讶没有人提到这一点:当从cron运行的脚本异常退出时,它会向/ etc / crontab中指定的邮件地址发送一封电子邮件。它包括脚本的所有输出。

答案 2 :(得分:0)

如果lazyguy可以在完成所有杂务后将某些内容打印到文件中,那么它会很棒。

          • rm -rf /tmp/lazyguy.log; /lazyguy.sh> /tmp/lazyguy.log

然后在另一个时间运行另一个脚本来检查lazyguy是否完成,仍在运行或根本没有运行。

检查你是否懒惰你可以做类似

的事情 checkamdump(){
while ps ax | grep -v grep | grep "lazyguy.sh" > /dev/null
do
sleep $SLEEPTIMEOUT
done
}

此外,您可以通过将其添加到您的脚本来检查lazyguy.log
FILESIZE=stat -c %s /tmp/lazyguy.log
if [ $FILESIZE -gt 0 ]
then
mailx -s "Lazyguy is really lazy" alerts@main.com < /tmp/lazyguy.log
fi
希望这有帮助,如果您有任何其他问题,请添加您的评论

答案 3 :(得分:0)

您可以通过命令行向自己发送电子邮件 使用mail命令。使用此链接http://www.amirwatad.com/blog/archives/2009/03/21/send-email-from-the-command-line-using-gmail-account/进行设置。你可以为此设置一个特殊帐户。