0

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

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

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

最初のビットは、全員が2で割り切れる時間であり、2番目の部分は、Pythonを使用してファイルを実行し、残りは本当にわかりません。

サポート担当者からメールが届きました。

つまり、stdoutとstderrはどこにもリダイレクトされないため、文字化けしたメッセージや、コマンド出力(cronで便利で一般的)を排除できます。

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

>>コマンドプロンプトで出力をファイルに書き込むために使用されたことを覚えているので、これは理にかなっています。私はまだ2つのことを取得していません。まず、何をし2>&1ますか?そして第二に、リダイレクトによって、彼は出力をに送信することについて話しているの/dev/nullですか?それがそこに行かず、それが機能していることを確認したかった場合、それはどこに行きますか?

4

4 に答える 4

2

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

出力を行きたくない場合は/dev/null、たとえばファイル名をそこに置くと、stderrとstdoutの出力がそこに行きます。

元:

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

最後に、>>(ではなく>)は追加を意味するため、ファイル名の場合、ファイルを上書きする代わりに出力が追加されます。とにかく、出力を破棄しているので/dev/null、それは問題ではありません。

于 2012-04-20T17:23:42.520 に答える
2

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

コンソールウィンドウで実行する場合python /path/to/file.py(たとえば、で始まる出力リダイレクトを削除する場合>>)、出力はコンソールに出力されます(視覚的に読み取ることができます)。

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

于 2012-04-20T17:24:36.427 に答える
1
  • >>そこには不要です-/dev/ nullは実際のファイルではありません、使用するかどうかは関係ありませ>>>
  • 2>&1STDERRをSTDOUTと同じ場所、つまり/ dev/nullに送信することを意味します
  • cronのマニュアルページでは、リダイレクトがない場合の動作について説明しています。通常、出力は管理者に電子メールで送信されます。
  • 動作していることを確認したい場合は、「/ dev/null」を「/tmp/ log」などの実際のファイルに置き換えて、そのファイルを確認します。これが、コマンドにが含まれている理由>>です。実際のファイルにログを記録するときは、上書きするのではなく、毎回追加する必要があります。
于 2012-04-20T17:27:06.560 に答える
0

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

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

エラーを破棄することは必ずしも良い考えではありませんが、コマンドが「おしゃべり」である場合、その出力は通常、cron仕事をしているユーザーへの電子メールになります。

于 2012-04-20T17:25:28.767 に答える