我在/usr/share/myscript.py
我想从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脚本以取消此操作并向我报告?
答案 0 :(得分:2)
此命令不按您想要的顺序重定向错误输出:
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中包装的脚本调用的末尾?