このコードは/etc/cron.daily/apfにあります。
#!/bin/bash
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1
ファイアウォールをフラッシュしてリロードしています。>> /dev/null 2>&1
の部分がわかりません。
これをクーロンに入れる目的は何ですか?それは私のファイアウォールルールを無効にします。このcronジョブを安全に削除できますか?
>> /dev/null
は標準出力(stdout
)を/dev/null
にリダイレクトし、それを破棄します。
(>>
は追記を意味し、>>
は切り捨てと書き込みを意味し、>
への追記と筆記のどちらも同じ効果があるので、/dev/null
は余分なものに思えます。通常は単に>
を使用します。)
2>&1
は、標準エラー(2
)を標準出力(1
)にリダイレクトします。標準出力はすでにリダイレクトされているので、これも破棄します。
>> /dev/null 2>&1
ステートメントを複数の部分に分割しましょう。
Part 1:>>
の出力リダイレクト
これはプログラムの出力をリダイレクトし、ファイルの最後に出力を追加するために使用されます。 もっと...
Part 2:/dev/null
スペシャルファイル
これは疑似デバイス特殊ファイルです。
コマンドls -l /dev/null
はこのファイルの詳細をあなたに与えるでしょう:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
crw
を見ましたか?つまり、シリアルアクセスを提供する 文字型特殊ファイル タイプの 疑似デバイス ファイルです。
/dev/null
はすべての入力を受け入れて破棄します。出力を生成しません(読み取り時には常にファイルの終わりの指示を返します)。リファレンス: ウィキペディア
Part 3:2>&1
ファイルディスクリプタ
プログラムを実行するときはいつでも、ファイルが開かれるたびにオペレーティングシステムは常に3つのファイルSTDIN
、STDOUT
、およびSTDERR
を開き、オペレーティングシステム( kernel から)は という負でない整数を返しますファイル記述子 。これらのファイルのファイル記述子は、それぞれ0、1、2です。
したがって2>&1
は単にSTDERR
をSTDOUT
にリダイレクトすると言うだけです。
&
は、その後に続くものがファイル記述子であり、ファイル名ではないことを意味します。
つまり、このコマンドを使用することで、実行中に叫んではいけないようにプログラムに指示しています。
2>&1
を使うことの重要性は何ですか?
端末で何らかのエラーが発生しても出力を生成したくない場合。より明確に説明するために、次の例を考えましょう。
$ ls -l > /dev/null
上記のコマンドでは、端末に出力は表示されませんでしたが、このコマンドでエラーが発生した場合はどうなりますか。
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
出力を/dev/null
にリダイレクトしていますが、端末に表示されます。これは、エラー出力を/dev/null
にリダイレクトしていないためです。したがって、エラー出力もリダイレクトするには、2>&1
を追加する必要があります。
$ ls -l file_doesnot_exists > /dev/null 2>&1
これはプログラムを静かに実行し、その出力をすべて隠す方法です。
/dev/null
は、書き込まれたものをすべて捨てる特別なファイルシステムオブジェクトです。ストリームをその中にリダイレクトすることは、出力を隠すことを意味します。
2>&1
部分は、「出力ストリームとエラーストリームの両方をリダイレクトする」という意味です。プログラムがstderr
に書き込んでも、その出力は表示されません。
/dev/null
- 書き込みをすべて破棄しますが、書き込み操作が成功したことを報告する標準ファイル。 1
は標準出力、2
は標準エラー出力です。 2>&1
は標準エラー出力を標準出力にリダイレクトします。 &1
はファイル記述子(stdout)を示します。それ以外の場合(単に1
を使用する場合)、stderrを1
という名前のファイルにリダイレクトします。 [any command] >>/dev/null 2>&1
は、すべてのstderrをstdoutにリダイレクトし、そのすべてを/dev/null
に書き込みます。
私はサイレントcronjobに>> /dev/null 2>&1
を使います、cronjobは仕事をします、しかし、私の電子メールに報告を送りません。
私の知る限りでは、/dev/null
を削除しないでください、それはあなたがcpanelを実行しているとき、それは特に役に立ちます。
他の人が説明したように、/ dev/nullに書き込むとプログラムの出力がなくなります。通常cronは、cronjobで開始されたプロセスからのすべての出力についてEメールを送信します。そのため、出力を/ dev/nullに書き込むことで、アドレスをcronで指定した場合にスパムメールが送信されるのを防ぎます。
/etc/conf.apf
を編集してください。 DEVEL_MODE="0"
を設定してください。 DEVEL_MODE
を1
に設定すると、5分後にapfを停止するcronジョブが追加されます。