g33*_*z0r 19 email scripting cron stderr
我有一些python脚本每天在cron中运行.如果我的脚本中出现STDERR OUTPUT,我怎么能让cron给我发电子邮件?我希望能够邮寄多个收件人,并为每个cron条目单独设置主题行.
我试过这个:
./prog > /dev/null | mail . . .
Run Code Online (Sandbox Code Playgroud)
但它不起作用 - 当没有STDERR时我仍然收到空白的电子邮件.我是否需要在脚本本身中执行此操作?
对不起,如果这看起来很基本,我已经google了很多但似乎无法找到这个简单的回答.
Shi*_*zmo 26
对于cron,您不需要通过邮件管道.cron守护程序将自动将您命令的任何输出邮寄给您.您的crontab条目应如下所示:
# every minute
* * * * * ./prog >/dev/null
Run Code Online (Sandbox Code Playgroud)
如果没有STDERR输出,您将不会收到任何邮件.
Jay*_* P. 15
mail v1.6有一个选项,可以不发送带有空体的消息:
-E Do not send messages with an empty body.
This is useful for piping errors from cron(8) scripts.
Run Code Online (Sandbox Code Playgroud)
这可能就是你要找的东西.
小智 15
你问的是不正确的问题.当您使用mail(1)发送电子邮件时,它与cron不再相关.你真正需要的是将stderr传递给邮件的stdin.普通管道是从stdout到stdin,解决这个问题的最简单方法是重定向:
{ /prog > /dev/null ; } 2>&1 | mail ...
或者由于重定向的顺序混乱而以不太清晰的方式:
/prog 2>&1 > /dev/null | mail ...
该 -s 文件是否存在,并有大小大于零档测试会告诉你.
./prog >/dev/null 2>some/file ; if [ -s some/file ] ; then mail < some/file ; fi
Run Code Online (Sandbox Code Playgroud)