Configuration-Management

cfengine3 輸出目錄

  • July 29, 2014

我已經開始執行 cfengine3,使用 cf-execd 以預設的每 5 分鐘間隔安排執行 cf-agent。

cf-execd 擷取 cf-agent 的輸出(使用 –inform 選項執行),將輸出儲存在 $WORKDIR/outputs 目錄中,並將結果通過電子郵件發送(但前提是它與上次執行不同)。就像你想像的那樣,每 5 分鐘輸出一個文件,這個目錄會很快被大量文件填滿,預計使用者會清理這個目錄。

我創建了一個規則,將刪除這些超過 3 天的輸出文件,但是這產生的問題是每個輸出都與前一個不同(因為每次都會刪除一個新文件),因此將發送一封電子郵件發送。因此,我從輸出目錄中的大量文件轉到收件箱中的大量電子郵件!

我真正想要的是在修復某些承諾時抑制消息,特別是刪除輸出目錄中文件的承諾。它基本上只會否定該承諾的 -I 選項。或者,如果我可以將時間邊界從“現在”更改為固定點(比如每週三),我至少可以將電子郵件數量限制為每週一封。

看起來你從來沒有得到你的問題的答案,所以我現在本著“遲到總比沒有好”的精神發布這個。

你問:

我真正想要的是在修復某些承諾時抑制消息,特別是刪除輸出目錄中文件的承諾。它基本上只會否定該承諾的 -I 選項。

據我所知,不可能為單個承諾否定 –inform 開關。

或者,如果我可以將時間邊界從“現在”更改為固定點(比如每週三),我至少可以將電子郵件數量限制為每週一封。

這可以使用“ifelapsed”參數來實現——這給出了執行承諾的最小頻率。考慮這個例子:

bundle agent garbage_collection {     
    files:
        "$(sys.workdir)/outputs" 
            delete => tidy,
            file_select => days_old("3"),
            depth_search => recurse("inf"),
            action => weekly;
}

body action weekly {
    ifelapsed => 10080; # one week, ie (60*24*7) minutes
}

或者你可以在星期三執行這個承諾,使用特殊課程。我更喜歡這種ifelapsed方法,它不依賴於工作日(你永遠不知道該主機是否可能不會在某個星期三執行……),如下所示:

bundle agent garbage_collection {     
    files:
        Wednesday::
            "$(sys.workdir)/outputs" 
                delete => tidy,
                file_select => days_old("3"),
                depth_search => recurse("inf");
}

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