我已经开始运行cfengine3,使用cf-execd以每5分钟的默认间隔计划cf-agent的运行。
cf-execd捕获cf-agent的输出(使用–inform选项运行),将输出存储在$ WORKDIR / outputs目录中,并通过电子邮件发送结果(但只有在不同于上次运行时)。 正如你可能想象的那样,每5分钟输出一个文件,这个目录就会快速填满大量的文件,用户可以清理这个目录。
我创build了一个规则,将删除这些超过3天的输出文件,但是这样做的问题是每个输出都会与前一个输出文件不同(因为每次都会删除一个新的文件),因此电子邮件将会发送。 所以我从输出目录中的大量文件,到我的收件箱中的很多电子邮件!
我真正想要的是在某些承诺被修复时抑制消息,特别是删除输出目录中的文件的消息。 这实质上只会否定这个承诺的-I选项。 或者,如果我可以将时间边界从“现在”改为固定点(比如说每个星期三),我至less可以将电子邮件的数量限制在每周一个。
看起来你从来没有回答过你的问题,所以我现在本着“比从未更好”的精神发表这个观点。
你问:
我真正想要的是在某些承诺被修复时抑制消息,特别是删除输出目录中的文件的消息。 这实质上只会否定这个承诺的-I选项。
据我所知,这是不可能否定一个单一承诺的信号切换。
或者,如果我可以将时间边界从“现在”改为固定点(比如说每个星期三),我至less可以将电子邮件的数量限制在每周一个。
这可以使用“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"); }
事实上,我来到一个更简单的答案 – 不要运行与-inform cf-agent。
只要让cf-engine做到这一点,不要试图跟踪正在进行的维修,主要关心的是系统已经达到了理想的状态,而不是如何到达那里。
这似乎是一个变革pipe理制度的anat ma,希望能够追踪系统的每一个变化,但是我发现这是唯一允许使用cf-engine的同时保持理智的思维模式。
当然,你的回答对我提出的问题是完全正确的,这就是我为什么select它的原因。
在我的“inheritance”部署中,我发现garbage_collection已经有一个garbage_collection包,但是它并没有从任何地方调用。 我需要在promises.cf添加捆绑序列
不确定在新部署中是否会出现这种情况; 如果是这样,你可能需要更新你的承诺(我知道我需要)
希望它有助于卡梅隆