我想使用Chef以一种收敛的方式设置我的crontab。也就是说,我想在我的食谱中指定cronjobs的列表,并让Chef修改我的crontab,使其仅包括那些条目,并根据需要在crontab中创建和删除行。
我该怎么做?
内置cron
资源似乎不适合该任务;它的资源是单独的cron作业,并执行cron
或:create
操作;当我从菜谱中删除条目时,除非我明确包含:delete
操作,并且我不想为已删除的每个crontab列出:delete
操作,否则我无法自动将其从crontab中删除从我整个历史的食谱中。
Chef超市的:delete
似乎也不大可能解决此问题,因为它声称支持与内置cron
cookbook资源相同的接口。
这没有明确命名,但是Chef资源设计中有两个一般的思想流派:“托管资源”与“托管集合”。使用托管集合,您可以收敛地定义集合的整个状态,而不是其中的单个对象。这种收集方法似乎是您正在寻找的一种方法,但是Chef社区(以及所有核心代码)通常会避免这种收集方法,因为它极容易出错。出于很多原因,Chef运行中可能看不到对象(部分运行,复合运行等),俗话说“缺少证据并不表示缺乏证据”。就是说,由于繁琐的代码审查和有关陷阱的培训,一些用户(Facebook)充分利用了收集模式。请查看cron
食谱,以了解可能适合您的cron
资源的实现。