Httpd

logrotate 輸出到 /dev/null 兩次?

  • September 24, 2014

所以我正在檢查我的 httpd 的 logrotate 配置,並且在該部分中postrotate ... endscript它具有以下內容:

/sbin/service httpd reload > /dev/null 2>/dev/null || true

我理解第一個,如果有輸出,​​將它發送到/dev/null,但是為什麼第二個條目?

我檢查了一個2>方法 stderr 來歸檔。因此,如果我理解正確,第一個條目告訴腳本發送stdout到 /dev/null,第二個條目告訴腳本發送到 /dev stderr/null,這是正確的嗎?

至於|| true,為什麼會在那裡?

另外,如果&>表示兩者stdout and stderr,我可以替換兩個條目並只指定一次以下內容:/sbin/service httpd reload &> /dev/null

第一個重定向只是覆蓋stdout- 通常將錯誤發送到,stderr因此仍然會在控制台上結束,而沒有第二個重定向告訴 shell 也將錯誤輸出發送到/dev/null

“2”指的是一個文件描述符:0 是標準輸入,1 是標準輸出,2 是標準錯誤,因此> /dev/null1> /dev/null假設您通常表示標準輸出的簡寫。進行第二次重定向的另一種方法2>&1是“將輸出發送到 fd 2 到 fd 1”(並且 fd 1 也將發送/dev/null到此輸出)。

|| true意思是“或真實的”。這意味著如果主命令失敗,即使執行腳本的 shell 設置為在所有失敗的命令上停止,執行也不會停止。該true命令(或內置的 shell)什麼也不做,只是簡單地返回一個通常表示成功的值。

所以基本上這條線說“做X,但我不關心輸出,如果它失敗了,繼續嘗試下一件事”。

引用自:https://serverfault.com/questions/630856