操作を誤って設定すると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デーモンからのメッセージは通常fromとして表示されますroot@yourhost
。MAILTO=...
crontabファイルの1行を使用して、cronに特定のアドレスに電子メールを送信するように指示できます。これにより、メーラーデーモンログをより簡単に収集できます。たとえば、
[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
次に、cronjobが実行されるのを待ってから、/var/log/messages(または一部のシステムでは/var/log/user.log)でエラーを見つけます。
これは、「yourcronjob:コマンドが見つかりません」など、長さが1行から2行のエラーメッセージに有効です。また、既存のsyslogインフラストラクチャ(Logrotation、Central Syslogging、Splunkなど)を活用します。また、スパムソースも削減されます。
cronjobが何百行もの出力を生成する場合、これは良い解決策ではないかもしれません。
答え4
デフォルトのクローン設定は、プログラムの出力を含む電子メールを送信します。失敗した場合は、失敗したプログラムをシェルスクリプトでラップして、プログラムが失敗しないことを確認し、さらに出力を記録できます。
これはいくつかのcron実装で設定可能な設定です。