回答:
他の人が指摘したように、実行されている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ファイルの行を使用して、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
。
dead.letter
は、ルートまたは各ユーザーのホームディレクトリで呼び出されるファイルに未配信のメールが見つかる場合もあります。
ジョブ出力をログファイルにいつでも明示的に送信できます。
0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1
crond iselfはジョブからの出力を受け取らないため、これは前述のメールの動作に優先することに注意してください。その動作を維持したい場合は、tee(1)を調べる必要があります。
>>
代わりにを使用して>
、ログファイルを毎回上書きしないのはなぜですか?
| /usr/bin/logger
ステファンが賢明に提案したように、希望する場合でも、あらゆる種類のI / Oリダイレクトが実行されます。毒を選ぶ:tldp.org/LDP/abs/html/io-redirection.html
myjob.log
を予想どおり0サイズで作成しましたが、別のファイルにログを記録しました。この設定はどこで変更できますか?
メールが表示されない場合、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が何百行もの出力を生成する場合、それは良い解決策ではないかもしれません。
デフォルトのcron構成では、プログラムの出力をメールで送信します。これが失敗した場合は、失敗したプログラムをシェルスクリプトでラップして、プログラムが失敗しないことを確認し、さらに出力をログに記録できます。
これは、一部のcron実装で構成可能な設定です。
crond
ジョブの実行に失敗したとき、またはジョブがゼロ以外の終了コードを返したときからメールを受け取る必要があります。入力してみてください:
$ mailx
コマンドプロンプトで。
mailx(1)
ほとんどすべてのUnixlikeシステムでの基本的なメール読み取りプログラムです。それは現代の標準では非常に原始的ですが、いつでも利用できると期待できます。他のより優れたメールエージェントが利用できる場合がありますが、使用しているランダムマシンにどのエージェントがインストールされているかがわからないほど十分にあります。
システムをインターネット電子メールサーバーとして設定していない限り、このメールサブシステムはマシン内でのみ使用されることに注意してください。マシン上の他のユーザーとメールを送受信できますが、世界にメールを送信できない場合があります。また、外の世界からのメールは確実にマシンに届きません。
私は数年前に同じスレッドに出くわしてこのスレッドに出くわし、最近リカルドの上記のケースの解決策に出会いました。電子メールがないことを検出することは困難であり(前述したとおり)、root @ yourcompanyの電子メールをスパムしたくないことは確かです。興味がある場合は、deadmanssnitch.comをチェックしてください。。このツールは、前述のケースを解決するようです。使い方は非常に簡単に思えます。ツールが提供するコードをcronjobに追加するだけです。指定した内部でジョブの実行に失敗すると、警告が表示されます。ジョブが再び実行を開始すると、警告も表示されます。