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
mysqldump
上記の例では、stdoutをに送信する必要があり、エラーが発生したifne xz
場合にのみロガーにパイプする必要があります。mysqldump
ifne xz
dash
/bin/sh
この構文は()内で機能する必要があります。
答え1
ロガーサブシステムを使用できます。インストールするかどうかに応じて、2つのバリエーションがあります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
rsyslog.conf
これは、出力/var/log/syslog
などを見つけることができる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
これらのロギングオプションの1つを使用するには、タスクに接続し、例のタグ名cron
(myscript
)と優先順位()を調整するだけです。info
0 * * * * /path/to/script 2>&1 | systemd-cat -t myscript -p info
具体的な例を提供したので、希望の場所に標準出力対象データファイルに書き込んでいますが、記録したいです。標準エラー、これを使用できます
0 * * * * ( mysqldump mydb | ifne xz > "/tmp/$(date +\%F).sql.xz" ) 2>&1 | logger -t mysqldump -p cron.err