修正する

修正する

MTA私のデスクトップにはインストールされていません。

スクリプトに問題が発生するたびに、cronjobログに次のものが表示されます。

CRON:  (CRON) info (No MTA installed, discarding output)

実行する必要があるスクリプトがcronエラーを生成し、cronエラーを電子メールで送信しようとします。

syslogしかし、私のログに上記のようなメッセージが正常に記録されたエラーを見たいと思いますinfo

cron忘れて、すべてMTA(エラーを含む)をローカルに記録することは可能ですかsyslog

修正する

@roaimaのソリューションは元の問題に完全に機能しました。しかし、私はパイプからパイプへ、(両方?)パイプから行くcronjobより複雑な構文が必要であることに気づきました。stdoutcommand1command2stderrcommand3

具体的な例は次のとおりです(単純化)。

0 * * * * mysqldump mydb | ifne xz > "/tmp/$(date +\%F).sql.xz" | logger -t mysqldump -p cron.err

mysqldump上記の例では、stdoutをに送信する必要があり、エラーが発生したifne xz場合にのみロガーにパイプする必要があります。mysqldumpifne xz

dash/bin/shこの構文は()内で機能する必要があります。

ベストアンサー1

ロガーサブシステムを使用できます。インストールするかどうかに応じて、2つのバリエーションがありますsystemd

  1. 次のように使用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
    
  2. 次のように使用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つを使用するには、タスクに接続し、例のタグ名cronmyscript)と優先順位()を調整するだけです。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

おすすめ記事