Cron

為什麼 >/dev/null 2>&1 可能不起作用?

  • August 20, 2018

執行 Ubuntu 16.04 我已將以下內容添加到 /etc/crontab:

* * * * * root wget https://www.exmaple.org/bus/ >/dev/null 2>&1

cron 作業正常執行,但結果作為文件寫入 /root/ 而不是按預期丟棄。

>/dev/null丟棄命令的標準輸出。您的範例中沒有。2>&1導致命令的標準錯誤被丟棄。在您的範例中,這包含 wget 顯示的狀態和錯誤資訊。

如果 URL 有效(如伺服器返回頁面的某些內容),wget 將頁面內容保存在文件中。這既不是顯示 wget 的標準輸出,也不是 wget 的標準錯誤:這是 wget 保存在文件中的一些數據。這不受重定向的影響,因為 wget 輸出到它按名稱打開的文件,而不是標準流。

如果您不想將輸出保存在任何地方,請告訴 wget 將其保存到/dev/null

wget -O /dev/null …

請注意,來自 cron 作業的錯誤很有用,但預設情況下 Ubuntu 會丟棄它們。cron 作業的輸出(標準輸出和標準錯誤)通過本地郵件發送;請參閱管理員應該如何閱讀 root 的郵件?如何使這項工作。令人討厭的是,即使一切正常,wget 也會產生大量輸出,它沒有選項只顯示錯誤。如果命令成功,您可以通過保存輸出並丟棄它來解決此問題:

trace=$(wget … 2>&1) || echo "$trace" >&2

引用自:https://unix.stackexchange.com/questions/369059