cronエラーはどこに記録されますか?


170

cronジョブを誤ってセットアップすると、サイレントで失敗するように見えます。何が間違っていたのかを理解するために、どこでエラーログを探すべきですか?

回答:


106

他の人が指摘したように、実行されているcronプログラムの出力をメールで送信します(出力がある場合)。したがって、出力が得られない場合、基本的に3つの可能性があります。

  1. crond プログラムを実行したり、メールを送信したりするためのシェルを起動することさえできませんでした
  2. crond 出力のメール送信に問題があったか、メールが失われました。
  3. プログラムは出力を生成しませんでした(エラーメッセージを含む)

ケース1はほとんどありませんが、cronログに何かが書き込まれているはずです。Cronには専用のsyslogファシリティが用意されているため/etc/syslog.conf、ファシリティのメッセージcronが送信される場所を確認する(またはディストリビューション内の同等のファイル)必要があります。人気のある目的地には/var/log/cron/var/log/messagesとが含まれます/var/log/syslog

ケース2.では、メーラーデーモンのログを調べる必要があります。通常、Cronデーモンからのメッセージはfromとして表示されroot@yourhostます。MAILTO=...crontabファイルの行を使用して、cronが特定のアドレスに電子メールを送信するようにできます。これにより、メーラーデーモンログのgrepが容易になります。例えば:

MAILTO=my.offsite.email@example.org
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


3
これらの「メール」もファイルに入れられますか?私は共有Webホスティングを使用しており、彼らが私にメールする場所を知っているとは思わない
ネイサンロング

3
コマンドが実行されているかどうかを確認するケース3のアドバイスに感謝します。私の場合、最近サーバーのタイムゾーンを変更し、適切なタイムゾーンでcron時間を評価するためにcronサーバーを再起動する必要があるため、cronはジョブを実行していませんでした。
ネイサン

1
メール転送エージェントによってdead.letterは、ルートまたは各ユーザーのホームディレクトリで呼び出されるファイルに未配信のメールが見つかる場合もあります。
ダリオセイドル

43

ジョブ出力をログファイルにいつでも明示的に送信できます。

0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1

crond iselfはジョブからの出力を受け取らないため、これは前述のメールの動作に優先することに注意してください。その動作を維持したい場合は、tee(1)を調べる必要があります。


9
>>代わりにを使用して>、ログファイルを毎回上書きしないのはなぜですか?
クリス

承知しました!| /usr/bin/loggerステファンが賢明に提案したように、希望する場合でも、あらゆる種類のI / Oリダイレクトが実行されます。毒を選ぶ:tldp.org/LDP/abs/html/io-redirection.html
コードヘッド

cronはこのログファイルmyjob.logを予想どおり0サイズで作成しましたが、別のファイルにログを記録しました。この設定はどこで変更できますか?
会計士م

42

メールが表示されない場合、root @ yourcompanyにエラーを送信している可能性があります。これは、そのアカウントを監視に使用しているユーザーにとって非常に迷惑なものです。代わりに出力をSyslogに送信してみてください。

*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag

次に、cronジョブが実行されるのを待って、/ var / log / messages(または一部のシステムでは/var/log/user.log)でエラーを探します。

これは、「yourcronjob:command not found」などの長さが1〜2行しかないエラーメッセージに最適です。また、既存のsyslogインフラストラクチャ(ログローテーション、中央syslog記録、Splunkなど)を利用します。また、ルートへの電子メールスパムを削減します。

cronjobが何百行もの出力を生成する場合、それは良い解決策ではないかもしれません。


8

デフォルトのcron構成では、プログラムの出力をメールで送信します。これが失敗した場合は、失敗したプログラムをシェルスクリプトでラップして、プログラムが失敗しないことを確認し、さらに出力をログに記録できます。

これは、一部のcron実装で構成可能な設定です。


7

crondジョブの実行に失敗したとき、またはジョブがゼロ以外の終了コードを返したときからメールを受け取る必要があります。入力してみてください:

$ mailx

コマンドプロンプトで。

mailx(1)ほとんどすべてのUnixlikeシステムでの基本的なメール読み取りプログラムです。それは現代の標準では非常に原始的ですが、いつでも利用できると期待できます。他のより優れたメールエージェントが利用できる場合がありますが、使用しているランダムマシンにどのエージェントがインストールされているかがわからないほど十分にあります。

システムをインターネット電子メールサーバーとして設定していない限り、このメールサブシステムはマシン内でのみ使用されることに注意してください。マシン上の他のユーザーとメールを送受信できますが、世界にメールを送信できない場合があります。また、外の世界からのメールは確実にマシンに届きません。


5

Cronは基本情報を/var/log/messagesに記録しますが、プログラムの出力を呼び出したユーザーにメールで送信します。


/var/log/messagesUbuntuサーバー(4.4.0-128-generic #154-Ubuntu SMP)にはありません。理由は何ですか?rootのcrontabで数か月間定義されたcronジョブがいくつかありましたが(例:)apt autoremove、どれも実行されていないようです。
ダンダスカレスク

2

私は数年前に同じスレッドに出くわしてこのスレッドに出くわし、最近リカルドの上記のケースの解決策に出会いました。電子メールがないことを検出することは困難であり(前述したとおり)、root @ yourcompanyの電子メールをスパムしたくないことは確かです。興味がある場合は、deadmanssnitch.comをチェックしてください。。このツールは、前述のケースを解決するようです。使い方は非常に簡単に思えます。ツールが提供するコードをcronjobに追加するだけです。指定した内部でジョブの実行に失敗すると、警告が表示されます。ジョブが再び実行を開始すると、警告も表示されます。


1

私はを使用vixie-cronしているため、これがすべてに当てはまるかどうかわかりません。しかしdead.letter、ジョブのすべての出力を含むファイルがあります。

私の/root/フォルダにはcrons.cron、を実行してcrontabとして設定したものがありますcrontab /root/crons.cron。 同様にdead.letter作成さ/root/れます。

私はただGoogleを編集しただけでdead.letter、配送できないメールです。明らかにcronとは関係ありません。メールが正しく設定されていない場合(私のように)、ファイルがあります。


0

初心者にとって、これはデバッグするのが面倒かもしれません。分と時間の値を入れ替えないでください。分が最初になり、次に時間が来ます。それぞれに12未満の値を指定すると、それらを受け入れますが、期待どおりに動作しないか、まったく動作しない場合があります。


2
あなたは正しいですが、これが本当に質問に答えるかどうかはわかりません。
ロアイマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.