使用 Chef 聚合配置 crontab

Convergently configure crontab with Chef

我想使用 Chef 以收敛的方式设置我的 crontab。也就是说,我想在我的食谱中指定一个 cronjobs 列表,并让 Chef 修改我的 crontab,以便它只包含那些条目,根据需要从 crontab 中创建和删除行。

我该怎么做?

内置 cron 资源似乎不适合该任务;它的资源是单独的 cron 作业,并执行 :create:delete 操作;当我从食谱中删除条目时,我不能让它自动从 crontab 中删除条目,除非我明确包含 :delete 操作,并且我不想为每个 crontab 列出 :delete 操作我已经从我的食谱中删除了整个历史。

Chef 超市的 cron cookbook 似乎也不太可能解决这个问题,因为它声称支持与内置 cron 资源相同的接口。

这没有明确命名,但在 Chef 资源设计中有两种普遍的思想流派:"managed resources" 与 "managed collections"。使用托管集合,您可以集中定义集合的整个状态,而不是其中的单个对象。这种收集方法似乎是您正在寻找的方法,但 Chef 社区(以及所有核心代码)通常会避免使用它,因为它非常容易出错。一个对象在 Chef 运行(部分 运行s、复合 运行s 等)中可能不可见的原因有很多,俗话说 "absence of evidence is not evidence of absence"。也就是说,由于大量的代码审查和关于陷阱的培训,一些用户(Facebook)已经使用集合模式取得了很好的效果。查看 https://github.com/nvwls/zap 说明书,了解可能满足您需要的 zap_crontab 资源的实现。