cron で実行するプログラムに独自のログ ファイルがあるかどうかを確認します。出力を標準出力に書き込まない場合は、これらをファイルにリダイレクトするか、メールで送信できます。 crontab 内で標準のシェル リダイレクションが機能します。
例えば。 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
または、代わりに郵送します (if mail
利用可能です)
33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" [email protected]
私が使用したプラットフォーム上のほとんどの cron デーモンは、ユーザーの cron ジョブの stdout/stderr を、ジョブの元の crontab を持つユーザーに自動的に電子メールで送信します。システム全体 (/etc/crontab からの非ユーザー固有の cron ジョブ) に何が起こるか忘れてしまいました。問題は、ほとんどの Unix ライクな OS で、メーラー デーモン (つまり、sendmail、qmail、postfix などのメール転送エージェント (MTA)) を常にセットアップしているわけではないということです。そのため、cron ジョブの出力メールは、たとえ 遠い。したがって、1 つの答えはメーラー デーモンを起動することかもしれません。また、ローカル メールを「実際の」メール アカウントに転送するための ~/.forward ファイルがあることを確認してください。
ジョブで特定のログ ファイルに書き込みたい場合は、@honk が提案するような標準出力リダイレクトを使用できます。または、cron ジョブがシェル スクリプトであると仮定すると、スクリプトで logger(1) または syslog(1) または syslog(1) を呼び出すことができます。任意のメッセージを syslog に送信するために OS が提供するその他のコマンドライン ツール。次に、おそらく /etc/syslog.conf を編集して、OS の組み込みメソッドを使用して、どの種類のメッセージをどこに記録するかを構成できます。
私の cron ジョブのほとんどは、特定の理由で cron によって開始されるという目的のために特別に作成した bash スクリプトを呼び出します。それらの中で、特に最初にそれらを作成してデバッグするときは、bash の「set -vx」を使用して、シェルスクリプトの各行の展開されていない形式と展開された形式を、実行前に stdout に書き込むのが好きです。 cron から開始されたシェル スクリプトは非ログイン、非対話型シェルと見なされるため、.bashrc や .profile などの標準のシェル起動スクリプトは実行されないことに注意してください。 bash を使用していて、bash で起動スクリプトを実行する場合は、ジョブを定義する行の前に、crontab で環境変数 "BASH_ENV=/path/to/my/startup/script" を定義する必要があります。
cron が実行しているタスクは、独自のログに責任があります。