我已经开始运行 cfengine3,使用 cf-execd 以每 5 分钟的默认间隔安排 cf-agent 的运行。
cf-execd 捕获 cf-agent(使用 --inform 选项运行)的输出,将输出存储在 $WORKDIR/outputs 目录中,并通过电子邮件发送结果(但前提是结果与上次运行不同)。您可以想象,每 5 分钟输出一个文件,这个目录很快就会被大量文件填满,因此希望用户清理这个目录。
我创建了一条规则,该规则将删除超过 3 天的输出文件,但是这会产生一个问题,即每次输出都会与前一个不同(因为每次都会删除一个新文件),因此会发送一封电子邮件。因此,我从输出目录中的大量文件转到收件箱中的大量电子邮件!
我真正想要的是,当某些承诺得到修复时,抑制消息,特别是删除输出目录中的文件的承诺。这实际上只会否定该承诺的 -I 选项。或者,如果我可以将时间界限从“现在”更改为固定点(例如每周三),我至少可以将电子邮件数量限制为每周一封。
答案1
看起来你还没有得到问题的答案,所以我本着“迟做总比不做好”的精神现在发布此帖。
你问:
我真正想要的是,当某些承诺得到修复时,抑制消息,尤其是删除输出目录中的文件的承诺。它本质上只会否定该承诺的 -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"); }
答案2
实际上我得出了一个更简单的答案——不要使用--inform运行cf-agent。
只需让 cf-engine 做它的事情,不要试图跟踪正在进行的修复,主要关注的是系统是否已经到达期望状态,而不是它如何到达那里。
对于想要详细追踪系统每个变化的变更管理机制来说,这似乎是一件令人厌恶的事情,然而我发现这是唯一允许人们使用 cf-engine 同时保持理智的思维方式。
当然,您的回答对于我提出的问题是完全正确的,这就是我勾选它的原因。
答案3
在我的“继承”部署中,我发现garbage_collection
中已经有一个包site.cf
,但它没有从任何地方调用。我需要将它添加到 中的包序列中promises.cf
不确定在新的部署中是否会出现这种情况;如果是这样,你可能需要更新你的承诺(我知道我需要)
希望这对你有帮助,卡梅伦