【问题标题】:cron job to execute script and email errors用于执行脚本和电子邮件错误的 cron 作业
【发布时间】:2012-03-29 01:21:41
【问题描述】:

我在/usr/share/myscript.py有一个python脚本

我想从 cron 作业中执行此脚本,如果脚本产生任何错误,则会将这些错误通过电子邮件发送给特定用户(并且不通知 root 帐户)。

我不想覆盖任何 cron 设置 - 其他 cron 作业仍应通知 root。

目前我正在使用 shell 包装器,它将错误通过管道传输到日志文件,然后通过电子邮件发送给我。 cron 作业然后执行这个 .sh 文件而不是直接执行 python 脚本。

#!/bin/sh
python /usr/share/scripts/myscript.py 2>&1 > /home/me/logs/myscript.log
test -s /home/me/logs/myscript.log && cat /home/me/logs/myscript.log | mail -s "myscript errors" bob@myplace.com

在生产中,如果没有出现任何问题,则脚本会正确执行,并且不会向任何人发送电子邮件。但是,如果在执行 python 脚本时出现错误,那么仍然会从 cron 将其通过电子邮件发送给 root 用户。

我应该如何更改 .sh 脚本来抑制这种情况并改为向我报告?

【问题讨论】:

    标签: python cron


    【解决方案1】:

    此命令不按您想要的顺序重定向错误输出:

    python /usr/share/scripts/myscript.py 2>&1 > /home/me/logs/myscript.log
    

    相反,您需要先重定向 stdin,然后再重定向 stderr,如下所示:

    python /usr/share/scripts/myscript.py > /home/me/logs/myscript.log 2>&1
    

    另外,您是否将 >/dev/null 2>&1 附加到 crontab 中包装脚本调用的末尾?

    【讨论】:

    • >/dev/null 2>&1 禁止您在 cron 中执行的命令的输出,因此不应发送电子邮件
    • 昨晚有一个脚本失败了,这一切都很好 - 谢谢!
    猜你喜欢
    • 2017-06-06
    • 2013-01-11
    • 2011-08-24
    • 2014-10-22
    • 1970-01-01
    • 2015-10-16
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多