Cron
cron:將錯誤發送到 syslog,而不是 MTA
我的桌面上沒有
MTA
安裝。每當
cronjob
腳本出現問題時,我都會在日誌中看到:CRON: (CRON) info (No MTA installed, discarding output)
一個應該執行的腳本
cron
生成了一個錯誤,並cron
希望通過電子郵件將錯誤發送給我。但我想在我的日誌中看到錯誤,即正常記錄到
syslog
,與上述info
消息相同。是否可以告訴
cron
忘記MTA
並將所有內容(包括錯誤)記錄到本地syslog
?更新
如前所述,@roaima 的解決方案適用於我原來的問題。但是我已經意識到我需要更複雜的語法來為我的
cronjob
,stdout
從哪里通過command1
管道傳輸到command2
和stderr
(從兩者?)通過管道傳輸到command3
.這是一個具體的例子(簡化):
0 * * * * mysqldump mydb | ifne xz > "/tmp/$(date +\%F).sql.xz" | logger -t mysqldump -p cron.err
在上面的範例中,我需要從 to 發送標準輸出
mysqldump
,ifne xz
並且只有當其中一個mysqldump
或ifne xz
生成錯誤時,我才需要將其通過管道傳輸到記錄器。此語法需要在
dash
(/bin/sh
)中工作
您可以使用記錄器子系統。有兩種變體,取決於您是否已
systemd
安裝。
- 與
systemd
- 使用systemd-cat
echo This is a test with systemd-cat | systemd-cat -t mytest -p info
這會將一條消息寫入日誌記錄器(請參閱 參考資料
journalctl
)並通過遺留系統日誌記錄子系統,您可以在其中找到輸出/var/log/syslog
等。journalctl -t mytest -- Logs begin at Thu 2020-05-21 07:41:00 UTC, end at Mon 2020-06-01 13:34:56 UTC. -- Jun 01 13:34:56 pi mytest[24236]: This is a test through systemd-cat
- 與
syslog
- 使用logger
echo This is a test with logger | logger -t mytest -p local0.info
這會通過 syslog 子系統(參見或類似內容)寫入一條消息
rsyslog.conf
,您可以在其中找到輸出/var/log/syslog
等。tail /var/log/syslog [...] Jun 1 13:34:56 pi mytest[24236]: This is a test through systemd-cat Jun 1 13:38:28 pi mytest: This is a test through logger
要使用這些日誌記錄選項之一,只需附加到您的
cron
作業,在範例中調整標籤名稱 (myscript
) 和優先級 (info
)0 * * * * /path/to/script 2>&1 | systemd-cat -t myscript -p info
現在您已經提供了一個具體範例,您希望將stdout寫入目標數據文件但您想記錄stderr,您可以使用它
0 * * * * ( mysqldump mydb | ifne xz > "/tmp/$(date +\%F).sql.xz" ) 2>&1 | logger -t mysqldump -p cron.err