2017-07-28 81 views
0

我在一個集羣中有兩個syslog-ng服務器(熱/冷),都映射相同的NFS共享。我想在系統日誌服務器上運行logrotate來旋轉存儲在NFS共享中的日誌。問題是,如果兩個節點都配置爲/etc/logrotate.d/syslog-ng,則會導致雙重旋轉。有預旋轉腳本的條件logrotate

我想在logrotate.d中必須有一種方法來使用prerotate節來確定是否在服務器上發生旋轉。換句話說,如果被動節點嘗試運行logrotate,則prerotate腳本將首先檢查該節點是否爲主節點。如果它不是主要的,我希望prerotate腳本在exitlogrotate過程運行之前。

有人能指點我在正確的方向弄清楚如何製作一個logrotate prerotate腳本exit它的父母logrotate過程?

回答

0

發現在手冊頁的答案(RTFM,哎呀!)

firstaction/endscript 
      The lines between firstaction and endscript (both of which must 
      appear on lines by themselves) are executed (using /bin/sh) once 
      before all log files that match the wildcarded pattern are 
      rotated, before prerotate script is run and only if at least one 
      log will actually be rotated. These directives may only appear 
      inside a log file definition. Whole pattern is passed to the 
      script as first argument. If the script exits with error, no 
      further processing is done. See also lastaction. 

我創建了一個firstaction bash腳本如下檢查,如果在節點上loadbalanced IP是否存在:

#!/bin/bash 

TESTCASE="$(ifconfig | grep 1.2.3.4)" 

if [ -z "$TESTCASE" ]; then 
     /bin/false 
fi 

如果它返回false,則logrotate不會繼續。

logrotate.d樣本:

/var/log/blah/*/*.log { 
    firstaction 
    /usr/local/bin/amiactive.sh > /dev/null 2>&1 
    endscript 
    ... 
    } 
1

好像預旋轉腳本簡單失敗(例如,如果您運行/ bin/false作爲腳本或bash腳本中的「exit 1」),那麼文件本身不會運行不會旋轉。但是之前的文件(foo.log.1,...)確實會旋轉。我想這可以被認定爲logrotate的bug。

所以,如果你還使用dateext(防止foo.log.1 => foo.log.2旋轉),你應該全部設置。

+0

我給這個一杆。感謝您的建議 – dobbs