Httpd
logrotate 輸出到 /dev/null 兩次?
所以我正在檢查我的 httpd 的 logrotate 配置,並且在該部分中
postrotate ... endscript
它具有以下內容:/sbin/service httpd reload > /dev/null 2>/dev/null || true
我理解第一個,如果有輸出,將它發送到/dev/null,但是為什麼第二個條目?
我檢查了一個
2>
方法 stderr 來歸檔。因此,如果我理解正確,第一個條目告訴腳本發送stdout
到 /dev/null,第二個條目告訴腳本發送到 /devstderr
/null,這是正確的嗎?至於
|| true
,為什麼會在那裡?另外,如果
&>
表示兩者stdout and stderr
,我可以替換兩個條目並只指定一次以下內容:/sbin/service httpd reload &> /dev/null
?
第一個重定向只是覆蓋
stdout
- 通常將錯誤發送到,stderr
因此仍然會在控制台上結束,而沒有第二個重定向告訴 shell 也將錯誤輸出發送到/dev/null
。“2”指的是一個文件描述符:0 是標準輸入,1 是標準輸出,2 是標準錯誤,因此
> /dev/null
是1> /dev/null
假設您通常表示標準輸出的簡寫。進行第二次重定向的另一種方法2>&1
是“將輸出發送到 fd 2 到 fd 1”(並且 fd 1 也將發送/dev/null
到此輸出)。
|| true
意思是“或真實的”。這意味著如果主命令失敗,即使執行腳本的 shell 設置為在所有失敗的命令上停止,執行也不會停止。該true
命令(或內置的 shell)什麼也不做,只是簡單地返回一個通常表示成功的值。所以基本上這條線說“做X,但我不關心輸出,如果它失敗了,繼續嘗試下一件事”。