crontabの実行方法についてのガイドはたくさん見かけますが、私が今必要としているのはその方法を学ぶことです
- cronジョブのログファイルを検索します
- ログに記録されるものを設定します
78 Zombies 2010-03-21
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" you@example.org
75 Benjamin Bannier 2010-03-21
私が扱ったことのあるプラットフォーム上のほとんどのcronデーモンは、ユーザーのcronジョブのstdout/stderrを、そのジョブが送られてきたcrontabのユーザーに自動的に電子メールで送っています。システム全体(/etc/crontabからの非ユーザ固有のcronジョブ)はどうなるのか忘れてしまいました。問題は、ほとんどのUnix系OSではメーラーデーモン(つまり、sendmailやqmail、postfixのようなメール転送エージェント(MTA)のようなもの)を設定していないことです。そのため、cronジョブの出力されたメールは、どこかのローカルメールスプールフォルダの中で死んでしまいます。そのため、メーラーデーモンを起動して、ローカルメールを “本当の “メールアカウントに転送するための ~/.forward ファイルを作成しておくのが一つの答えかもしれません
ジョブを特定のログファイルに書き込ませたい場合、@honkが提案したような標準的な出力リダイレクトを使うことができます。また、cronジョブがシェルスクリプトだとすると、logger(1)やsyslog(1)など、任意のメッセージをsyslogに送信するためにOSが提供しているコマンドラインツールを呼び出すことができます。それから、/etc/syslog.confを編集することで、どの種類のメッセージがどこにログに記録されるかを設定するために、OSに組み込まれた方法を使うことができます
私の cron ジョブのほとんどは、特定の理由で cron によって起動される目的のために特別に書いた bash スクリプトを起動します。これらの場合、特に最初に書いたりデバッグしたりするときには、bash の “set -vx” を使って、シェルスクリプトの各行の展開されていない拡張された形式を実行される前に標準出力に書き込ませるのが好きです。cron から起動されたシェルスクリプトは非ログイン、非対話型シェルとみなされるので、.bashrc や .profile のような標準のシェル起動スクリプトは実行されないことに注意してください。bash を使用していて、起動スクリプトを bash に実行させたい場合は、ジョブを定義する行の前に環境変数 “BASH_ENV=/path/to/my/startup/script” を crontab に定義しなければなりません
10 Spiff 2010-03-21
cronが実行しているタスクは、自分自身のログを記録する責任があります
5 ceejayoz 2010-03-21
この場合、cron-file内でリダイレクトするのは最良の選択肢ではないと思います
多くの場合、ロギング処理を cron ジョブスクリプトと同位置にしたいことがあります。この場合、次のようにすることをお勧めします
#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>
これは、cron ジョブからの出力を capture-log.txt ファイルに追加します
4 user239558 2013-03-21
最も簡単な方法は、印刷エラーをキャプチャしてファイルに保存することです。私は以下のように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でアクセスログを検索してみてください
最後に、/var/log/messagesもチェックしてみましょう
2 gabriel_lucius 2015-04-14
クロンジョブについてのレポートをメールで受け取るのが好きです。置くだけです
MAILTO=yourmail@domain.com
をcrontabに入力するとメールが届きます。もちろん、自分のアカウントにメールの設定をしておく必要があります
追加情報です。crontabの各行の前にmailtoを置くことで、異なるメールを指定することができます
MAILTO=mail1@domain.com
0 1 * * * <job at 1 a.m. sent to mail1>
MAILTO=mail2@domain.com
0 2 * * * <job at 2 a.m. sent to mail2>
2 nobody 2014-07-04