两个 cron 重定向之间的差异

两个 cron 重定向之间的差异

以下两种运行方式有什么区别cron?基本上,我只是想写入一个文件并查看哪个是首选/正确的:

2 * * * * python script.py >> /tmp/script.log

对比:

2 * * * * python script.py >> /tmp/script.log 2>&1

看起来它们都写入日志,但也许第一个“刷新”更频繁?

大多数输出​​是通过普通的打印语句完成的:

print('hello')

我认为这相当于每次打印后都sys.stdout隐式写入。\n

答案1

第一个重定向将(仅)标准输出附加script.py到日志文件。

如果脚本在标准错误通道上生成任何消息(Python 语:写入sys.stderr),这些消息将照常由 处理cron,即 cron 守护进程将收集它们,并在作业结束后尝试将它们作为本地消息发送。向拥有 cron 作业的用户发送电子邮件消息。

通常,此类本地电子邮件将由本地邮件传输代理(简称MTA)处理,并且它们将登陆到用户的本地电子邮件收件箱文件中,例如/var/mail/<username>。但是,如果系统没有安装本地 MTA,则此过程可能会失败,并且 cron 作业错误消息可能会丢失。

如果系统具有正确配置的 MTA,也可以在本地系统外部发送邮件,则此电子邮件传送可以重定向到您想要的任何电子邮件地址。


第二个重定向将标准输出和标准错误输出附加到日志文件中。如果 cron 作业以非零结果代码退出,则 cron 守护程序可能仍会尝试向作业所有者发送本地电子邮件,只是为了向作业所有者报告结果代码。

哪一个是首选/正确的?这取决于您的脚本正在做什么以及您是否想要更立即地通知脚本错误(通过电子邮件)。

相关内容