以下两种运行方式有什么区别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
。
第一次重定向将标准输出(仅)附加script.py
到日志文件。
如果脚本在标准错误通道上产生任何消息(在 Pythonese 中:写入sys.stderr
),这些消息将像往常一样由 处理cron
,即 cron 守护程序将收集它们,并在作业结束后,将尝试将它们作为本地发送发送给拥有 cron 作业的用户的电子邮件。
通常,此类本地电子邮件将由本地邮件传输代理(简称 MTA)处理,它们将登陆用户的本地电子邮件收件箱文件,例如/var/mail/<username>
. 但是,如果系统没有安装本地 MTA,此过程可能会失败,并且 cron 作业错误消息可能会丢失。
如果系统有一个正确配置的 MTA,它也可以在本地系统之外发送邮件,则此电子邮件传递可以重定向到您想要的任何电子邮件地址。
第二个重定向将标准输出和标准错误输出附加到日志文件中。如果 cron 作业以非零结果代码退出,则 cron 守护程序可能仍会尝试向作业所有者发送本地电子邮件,只是将结果代码报告给作业所有者。
哪一个是首选/正确的?这取决于您的脚本正在做什么,以及您是否想要更直接的脚本错误通知(通过电子邮件)。
归档时间: |
|
查看次数: |
31 次 |
最近记录: |