我想使用Chef以幂等方式设置我的crontab。也就是说,我想在我的食谱中指定一个cronjobs列表,并让Chef修改我的crontab,使其只包含那些条目,根据需要在crontab中创建和删除行。
我该怎么做?
内置cron
资源似乎不适合该任务;它的资源是个人的cron工作,并采取:create
或:delete
行动;当我从菜谱中删除条目时,除非我明确包含:delete
操作,否则我无法自动删除crontab中的条目,并且我不想为每个crontab列出:delete
个操作我从历史中删除了我的食谱。
Chef Supermarket的cron
cookbook似乎也不太可能解决这个问题,因为它声称支持与内置cron
资源相同的界面。
答案 0 :(得分:2)
这没有明确命名,但在Chef资源设计中有两种普遍的思想流派:“托管资源”与“托管集合”。使用托管集合,您可以集中定义集合的整个状态,而不是其中的单个对象。这种收集方法似乎是您正在寻找的方法,但它通常由Chef社区(以及所有核心代码)避免,因为它极易出错。在Chef运行(部分运行,复合运行等)中可能看不到对象的原因很多,并且俗话说“没有证据不是缺席的证据”。也就是说,由于大量的代码审查和有关陷阱的培训,一些用户(Facebook)使用了收集模式,效果很好。查看https://github.com/nvwls/zap食谱,了解可能符合您需求的zap_crontab
资源的实施。