このcrontabの基本記事では、'>/dev/null 2>&1'はどういう意味ですか? [コピー]

このcrontabの基本記事では、'>/dev/null 2>&1'はどういう意味ですか? [コピー]

に関する記事を読んでいます。予約されたこと

自動メールを無効にする方法があります。

  1. 電子メールの無効化 デフォルトでは、cron ジョブは cronjob を実行しているユーザーアカウントに電子メールを送信します。必要でない場合は、cron タスクラインの末尾に次のコマンドを入力します。

    >/dev/null 2>&1
    

2 > &との詳細な意味は何ですか1?これをcrontabファイルの末尾に置くと、電子メールの送信がオフになるのはなぜですか?

答え1

>リダイレクトのため

/dev/nullブラックホールであり、送信されたすべてのデータは破棄されます。

2標準エラーのファイル記述子です。

>リダイレクトのため

&ファイル記述子のシンボルです(このシンボルがない場合、次は1ファイル名として扱われます)。

1標準出力のファイル記述子です。

したがって、>/dev/null 2>&1プログラムの出力を/dev/null.includesStandard ErrorStandard Out

詳細については、Linuxドキュメントプロジェクトを参照してください。入力/出力リダイレクトページ。

cronあなたの仕事からいくつかの結果が出たときにのみ電子メールが届きます。すべてがにリダイレクトされるため、null出力がないため、cron電子メールは送信されません。

答え2

/dev/nullブラックホールとして機能するデバイスファイルです。書かれたものは何でも捨てられたり消えたりする。出力を提供するスクリプトを実行するときに> /dev/null 2>&1スクリプトの末尾にを追加すると、スクリプトが生成するすべてのもの(出力およびエラーメッセージ)に書き込むようにスクリプトに要求します/dev/null

それを破壊する:

  • 2標準エラーに対するハンドルまたはSTDERR
  • 1標準出力へのハンドルまたはSTDOUT

2>&1すべてのSTDERR指示に従ってSTDOUT(つまり、スクリプトによって生成されたすべてのエラーメッセージを標準出力として扱う必要がある)必要があります。これは> /dev/nullスクリプトの終わりにあるので、これはすべてのstdout(STDOUT)がに書き込まれることを意味します/dev/null。なぜなら、今、両方とも結局ブラックホールに陥ることにSTDERRなるからです。つまり、スクリプトが沈黙します。STDOUT2>&1STDERRSTDOUT/dev/null

ところで、>前に一つがなければなり/dev/null 2>&1ません。

x * * * * /path/to/my/script > /dev/null 2>&1

答え3

これは標準I / Oリダイレクトです。

3 つの基本ファイルが常に開きます。

  • 標準入力(0)
  • 標準出力(1)
  • 標準エラー(2)

したがって、この例では stdout( 1) にリダイレクトされます/dev/null

デバイスnullは、記録されたすべてのデータを削除するデバイスファイルです。

その後、stderrはstdout(2>&1)にリダイレクトされるため、stdoutとstderrの両方が次に移動します。/dev/null

だからこれをcrontabジョブの最後に配置すると、コマンドのすべての出力とエラーが抑制されます。

引用する

入力/出力リダイレクト

答え4

通常、croncronjobが実行されると、cronjobに提供されたコマンドの出力がcronjobを実行したユーザーアカウントに送信されます。たとえば、cronjobが実行されると、uptime出力はuptimeユーザーに電子メールで送信されます。

明確にする必要があるのは、stdoutこのコマンドの標準出力()の意味です。uptimecornjobで次のコマンドを実行すると:

uptime >/dev/null 2>&1
  • 2>&1チャンネル2(stderr)をチャンネル1(stdout)にリダイレクトします。これで、両方の出力が同じチャネル(1)にあります。
  • >/dev/null:標準出力(および標準エラー出力)がに送信されることを示します/dev/null/dev/null特殊ファイルです。

空のファイルや特殊ファイルのないファイルに書き込まれたデータは削除されます。

したがって、出力を削除してcronに送信することはありません。

関連情報