linux – cronジョブの結果を見るにはどうすればいいですか?

cron linux ubuntu

crontabの実行方法についてのガイドはたくさん見かけますが、私が今必要としているのはその方法を学ぶことです

  1. cronジョブのログファイルを検索します
  2. ログに記録されるものを設定します

  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


タイトルとURLをコピーしました