两个 cron 重定向之间的区别

Dav*_*542 0 cron

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

2 * * * * python script.py >> /tmp/script.log
Run Code Online (Sandbox Code Playgroud)

对比:

2 * * * * python script.py >> /tmp/script.log 2>&1
Run Code Online (Sandbox Code Playgroud)

似乎他们都写入日志,但也许第一个更频繁地“刷新”?

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

print('hello')
Run Code Online (Sandbox Code Playgroud)

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

tel*_*coM 5

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

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

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

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


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

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