
ジョブを誤って設定すると、cron
何も表示されずに失敗するように見えます。何が問題だったのかを理解するために、エラー ログはどこで確認すればよいですか?
答え1
他の人が指摘しているように、cron
実行したプログラムの出力(出力がある場合)が電子メールで送信されます。したがって、出力がない場合は、基本的に次の 3 つの可能性があります。
crond
プログラムを実行したり電子メールを送信したりするためのシェルを起動することさえできなかったcrond
出力をメールで送信する際に問題が発生したか、メールが失われました。- プログラムは出力を生成しませんでした(エラーメッセージを含む)
ケース 1 は可能性が非常に低いですが、cron ログに何かが書き込まれているはずです。cron には独自の予約済み syslog 機能があるため、/etc/syslog.conf
(またはディストリビューションの同等のファイル) を調べて、機能のメッセージがどこに送信されるかを確認する必要があります。一般的な送信先には、、およびなどがcron
あります。/var/log/cron
/var/log/messages
/var/log/syslog
2. の場合、メーラーデーモンのログを調べる必要があります。Cron デーモンからのメッセージは通常、 から として表示されますroot@yourhost
。crontab ファイルの行を使用して、cron が特定のアドレスに電子メールを送信するようにすることができますMAILTO=...
。これにより、メーラーデーモンのログを grep しやすくなります。たとえば、次のようになります。
[email protected]
00 15 * * * echo "Just testing if crond sends email"
3.の場合、効果を簡単に確認できる別のコマンドを追加することで、プログラムが実際に実行されたかどうかをテストできます。たとえば、
00 15 * * * /a/command; touch /tmp/a_command_has_run
crond
したがって、の mtime を確認することで、 が実際に何かを実行したかどうかを確認できます/tmp/a_command_has_run
。
答え2
ジョブ出力をいつでも明示的にログ ファイルに送信できます。
0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1
crond 自体はジョブからの出力を一切受け取らないため、これは前に述べたメールの動作に取って代わることに注意してください。その動作を維持したい場合は、tee(1) を調べる必要があります。
答え3
メールが表示されない場合は、root@yourcompany にエラーをスパム送信している可能性があります。これは、そのアカウントを監視に使用しているユーザーにとって非常に迷惑な場合があります。代わりに、出力を Syslog に送信してみてください。
*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag
次に、cron ジョブが実行されるまで待機し、/var/log/messages (一部のシステムでは /var/log/user.log) でエラーを探します。
これは、「yourcronjob: コマンドが見つかりません」など、1 行から 2 行しかないエラー メッセージに最適です。また、既存の syslog インフラストラクチャ (Logrotation、中央 syslog、Splunk など) も活用します。また、ルートへの電子メール スパムも削減します。
cronjob が数百行の出力を生成する場合、これは適切な解決策ではない可能性があります。
答え4
デフォルトの cron 設定では、プログラムの出力を記載したメールが送信されます。これが失敗した場合は、失敗したプログラムをシェル スクリプトでラップして、プログラムが失敗しないようにし、さらに出力をログに記録することができます。
これは、一部の cron 実装で構成可能な設定です。