web-dev-qa-db-ja.com

cronの仕事の結果を見るにはどうすればいいですか?

Crontabの実行方法についてのガイドはたくさんありますが、今必要なのはその方法を学ぶことです。

  1. Cronジョブに関するログファイルを見つける
  2. ログに記録する内容を設定する
65
Zombies

Cronで実行しているプログラムに独自のログファイルがあるかどうかを確認してください。もしそれらが標準出力にそれらの出力を書き込まなければならないなら、あなたはそれらをファイルにリダイレクトするか、あなたにそれらをメールすることができます。内部crontabs 標準のシェルリダイレクト は機能します。

例えば。 some_job.shのエラー出力をsome_job.errにリダイレクトし、標準出力を破棄する(すなわち、それを/dev/nullに送信する)には、crontabに次のリダイレクトを追加します。

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err

または代わりにそれをあなたに郵送する(mailが利用可能な場合)

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" [email protected]
65

私が仕事をしてきたプラットフォーム上のほとんどのcronデーモンは、自動的にユーザーのcronジョブのstdout/stderrを、そのジョブが由来するcrontabを持つユーザーに電子メールで送信します。システム全体(/ etc/crontabからのユーザー固有ではないcronジョブ)に何が起こるか忘れています。問題は、ほとんどのUnixライクOS上で、メーラデーモン(つまり、sendmail、qmail、またはpostfixのようなMail Transfer Agent(MTA))を常にセットアップするとは限らないことです。そのため、cronジョブの出力メールは、その範囲内に到達した場合でも、ローカルのメールスプールフォルダに保存されるだけです。だから一つの答えはあなたのメーラデーモンを起動することかもしれません、そして多分あなたがあなたの "本当の" Eメールアカウントにあなたのローカルメールを転送するための〜/ .forwardファイルを持っていることを確かめてください。

ジョブに特定のログファイルへの書き込みをさせたい場合は、@ Honkが提案するような標準出力のリダイレクトを使うことができます。あるいは、cronジョブがシェルスクリプトであると仮定すると、スクリプトはlogger(1)またはsyslog(1)あなたのOSがsyslogに任意のメッセージを送るために提供している他のどんなコマンドラインツールでも。それから、OSの組み込みメソッドを使って、どの種類のメッセージをどこに記録するかを設定することができます。おそらく/etc/syslog.confを編集します。

私のcronジョブのほとんどは、特定の理由でcronによって開始されることを目的として、私が特に書いたbashスクリプトを呼び出します。その中で、特に最初にそれらを書いてデバッグしているとき、私はbashの "set -vx"を使ってシェルスクリプトの各行の展開されていない展開された形式を実行前に標準出力に書きます。 cronから起動されたシェルスクリプトは非ログイン、非対話型のシェルと見なされるため、.bashrcや.profileなどの標準のシェル起動スクリプトは実行されません。 bashを使用し、bashに起動スクリプトを実行させたい場合は、ジョブを定義する行の前に、環境変数 "BASH_ENV =/path/to/my/startup/script"をcrontabに定義する必要があります。

8
Spiff

Cronが実行しているタスクは、それら自身のログ記録に対して責任があります。

5
ceejayoz

最も簡単な方法は、印刷エラーをキャプチャしてファイルに保存することです。私はこのようにphpコマンドラインを呼び出すcronjobを持っています:

1 0 * * * php /pathOfMyApp/index.php controllerName functionName>/pathOfMyApp/log/myErrorLog 2>&1

'>'の前の部分は私のcronjobで、 '>'の後の部分はキャプチャされ、私のプロジェクトのルートにあるログフォルダーにあるファイルに保存されますが、好きな場所に置くこともできます。 cronjobが呼び出されるたびに、彼は最後のログを上書きします。 '>>'を使用して既存のファイルの末尾に書き込むことも、 'cat'端末コマンドを検索することもできます。

Crontabで 'curl'または 'wget'を使用してリンクを参照している場合は、/ var/log/httpd/appNameでaccess-logを検索できます。cronが500または400で戻ってきた場合は、問題があります。

最後に、/ var/log/messagesもチェックできます。

2
gabriel_lucius

私はcronの仕事についての電子メールによる報告を受け取ることを好みます。置くだけ

MAILTO = [email protected]

crontabにあなたは電子メールを受け取るでしょう。もちろん、あなたは自分のアカウントにEメールを設定しなければなりません。

1
nobody

この場合、cronファイル内でリダイレクトするのが最善の選択肢ではないかもしれません。

ロギングスペシフィケーションをcronジョブスクリプトと同じ場所に配置したいことがよくあります。この場合、私は以下を提案します:

#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>

これにより、cronジョブからの出力がcapture-log.txtファイルに追加されます。

1
user239558