
次の2つの動作モードの違いは何ですかcron
?基本的にファイルに書き込んで、どのファイルが優先または正しいかを確認したいと思います。
2 * * * * python script.py >> /tmp/script.log
比較:
2 * * * * python script.py >> /tmp/script.log 2>&1
どちらもログに記録しているように見えますが、最初のエントリがより頻繁に「フラッシュ」されるのではないでしょうか?
ほとんどの出力は通常の print ステートメントを介して行われます。
print('hello')
私はこれがsys.stdout
印刷ごとに暗黙的に書くのと同じだと思います。\n
答え1
最初のリダイレクトでは、標準出力のみがscript.py
ログファイルに追加されます。
スクリプトが標準エラーチャネル(Pythonic:write sys.stderr
)からメッセージを生成すると、これらのメッセージは通常どおりに処理されますcron
。つまり、cronデーモンはそのメッセージを収集し、操作が完了した後にローカルメッセージに送信しようとします。クローンジョブを所有しているユーザーに電子メールメッセージを送信します。
通常、これらのローカル電子メールはローカルメール転送エージェント(MTAなど)によって処理され、ユーザーのローカル電子メール受信トレイファイル(たとえば)に保存されます/var/mail/<username>
。ただし、システムにローカルMTAがインストールされていない場合、このプロセスは失敗し、cronジョブエラーメッセージが失われる可能性があります。
システムにローカルシステムの外部にメールを送信することができる適切に構成されたMTAがある場合、この電子メール転送は目的の電子メールアドレスにリダイレクトできます。
2番目のリダイレクトは、標準出力と標準エラー出力をログファイルに追加します。 cronジョブがゼロ以外の結果コードで終了すると、cronデーモンはジョブ所有者に結果コードを報告するためにジョブ所有者にローカルの電子メールを送信しようとする可能性があります。
どちらが好ましいか正しいですか?これは、スクリプトが何をしているのか、そしてスクリプトエラーについての即時通知(電子メール経由)を望むかどうかによって異なります。