2012-04-20 4 views
0

私はcronのための何らかの学習ブロックを持っていますが、何を読んでも、それを理解することはできません。私は2時間ごとにpythonスクリプトを実行するcronジョブを作成するために私のウェブホストから助けを求めました。このcronjobは何をしていますか?

これは彼が返送されたものです:

0 */2 * * * python /path/to/file.py >> /dev/null 2>&1 

私は最初のビットが2番目の部分は、私のファイルを実行するためのpythonを使用して、残り、Iドンされ、2で割り切れるみんなの時間を言っていることを取得本当に知っている。

支援男は私にはcronであれば任意の(有益と 共通stdoutとstderrが文字化けしたメッセージのクリーン を保つためにどこにリダイレクトされないことを意味し、バック

を言って、電子メール、およびコマンド出力を送っ)。

スクリプト機能をテストするには、リダイレクトなしで同じ機能を使用します。

>>がファイルに出力を書き込むためにコマンドプロンプトで使用されているので、意味があります。私はまだ2つのことを取得しません。まず、2>&1は何をしていますか?次に、リダイレクトによって、出力を/dev/nullに送信することについて話していますか?それがそこに行かなかった場合、私はそれが動作していたことを確認したいと思った、それはどこに行くだろうか?

+0

http://en.wikipedia.org/wiki/File_descriptor(これは0,1,2について説明します)また、ファイルへの出力リダイレクトを表示したい場合は、/ tmp /somefile.log –

答えて

2

2はstderrストリームを表し、/dev/null(「ビットバケット」と呼ばれることもあります)というストリーム1(stdout)と同じ場所にリダイレクトするとしています。

出力が/dev/nullにならないようにするには、たとえばファイル名を入力し、stderrとstdoutの出力をそこに入力します。

例:

0 */2 * * * python /path/to/file.py >> your_filename 2>&1 

最後に、>>は(>とは対照的に)付加を意味するので、ファイル名の場合には、出力ではなくファイルを上書きで付加されることになります。 /dev/nullでは、とにかく出力を放棄しているので問題はありません。

+1

素晴らしいです、ありがとうございます。 – mowwwalker

2

2>&1(どこ/dev/null =にあなたのケースで例えば)、標準出力と同じストリームにすべてのエラー出力をリダイレクトし

コンソールウィンドウでpython /path/to/file.pyを実行する場合(例えば>>で始まる出力リダイレクトを削除します)

注:デフォルトでは、cronジョブの出力はジョブを所有しているユーザーに電子メールとして送信されます。そのため、標準出力とエラー出力を常に/dev/nullに送るのは非常に一般的です。

+0

私の経験では、 'cron'ジョブは正常に'/dev/console'に出力されません。 –

+0

コンソールウィンドウ(コンソールに出力が表示されている)でコマンドを実行する簡単な説明が追加され、cronジョブの出力が電子メールとして送信される – erikxiv

0

>>は、標準出力を/dev/nullに追加します。 2>&1は、ファイル記述子1(標準出力)と同じ場所にファイル記述子2(標準エラー)を送ります。

追加は異常ですが、実際には有害ではありません。通常は>と書いてください。/dev/nullの代わりに実際のファイルを扱っていた場合は、appendがおそらくより優れているので、/dev/nullから/tmp/cron/job.logなどに変更したときに問題が発生する可能性は低くなります。

投げ捨てエラーは必ずしも良い考えではありませんが、コマンドが 'chatty'の場合、その出力は通常cronジョブのユーザーに電子メールで送信されます。

1
  • >>が不要である - は/ dev/nullに実際のファイルではありません、それはあなたが>または>>
  • 2>&1手段を使用するかどうかは問題ではありませんつまりは/ dev、STDOUTと同じ場所にSTDERRを送ります/ null
  • The man page for cronは、リダイレクトがない場合の動作を説明しています。一般的には、管理者に電子メールで出力します。
  • 「/ dev/null」を実際のファイル「say/tmp/log」に置き換え、そのファイルをチェックします。これは、コマンドに>>がある理由です。実際のファイルにロギングするときは、上書きするのではなく、毎回追加する必要があります。
関連する問題