Cron
兩個 cron 重定向之間的區別
以下兩種執行方式有什麼區別
cron
?基本上,我只是想寫入一個文件並查看哪個是首選/正確的:2 * * * * python script.py >> /tmp/script.log
與:
2 * * * * python script.py >> /tmp/script.log 2>&1
似乎他們都寫入日誌,但也許第一個更頻繁地“刷新”?
大多數輸出是由正常的列印語句完成的:
print('hello')
我認為這相當於在每次列印後
sys.stdout
隱式寫入。\n
第一個重定向將標準輸出(僅)附加
script.py
到日誌文件。如果腳本在標準錯誤通道上產生任何消息(在 Pythonese 中:寫入到
sys.stderr
),這些消息將照常由 處理cron
,即 cron 守護程序將收集它們,並且在作業結束後,將嘗試將它們作為本地發送發送給擁有 cron 作業的使用者的電子郵件。通常,此類本地電子郵件將由本地郵件傳輸代理(簡稱 MTA)處理,它們將登陸使用者的本地電子郵件收件箱文件,例如
/var/mail/<username>
. 但是,如果系統沒有安裝本地 MTA,則此過程可能會失敗並且 cron 作業錯誤消息可能會失去。如果系統有一個正確配置的 MTA,它也可以在本地系統之外發送郵件,則此電子郵件傳遞可以重定向到您想要的任何電子郵件地址。
第二個重定向將標準輸出和標準錯誤輸出都附加到日誌文件中。如果 cron 作業以非零結果程式碼退出,則 cron 守護程序可能仍會嘗試向作業所有者發送本地電子郵件,只是將結果程式碼報告給作業所有者。
哪一個是首選/正確的?這取決於您的腳本正在做什麼,以及您是否想要更直接地通知腳本錯誤(通過電子郵件)。