Crontab版本控制?

5
我有几十台运行着的Linux机器,我想把crontab放到某种版本控制系统中。对于源代码控制,我使用Mercurial (),所以这是理想的选择,但如果有其他更适合此任务的系统,我也会考虑。

我的情况特定之处在于,所有的crontab都属于一个公共用户(不是真实人员,而是一个占位符“services”登录)。我希望版本历史记录包括每个更改的实际作者,而不是cron作业实际运行的特殊账户。


你考虑过使用 /etc/crontab.d 吗?你可以将 crontab 模板保存在版本控制中,使用占位符来代替用户和其他可能因系统而异的内容。 - ealfonso
3个回答

5

crontab -l 命令会将您的 crontab 转储到标准输出,您可以将其重定向到文件中。您可以在 cron 中设置一个任务,将此文件重定向到另一个文件中,然后进行差异比较,并根据需要将其推送到源代码控制。


是的,但这样就没有地方写提交注释或作者属性了。 - John Zwinck
这个答案与我们最终采取的方法最接近。我们只是跳过了自动提交到版本控制系统,因为我们希望作者和注释字段正确。所以如果有人忘记将更改检入仓库,我们会发送警告邮件。它的效果还算可以,但仍然需要改进。 - John Zwinck

2

http://joey.kitenet.net/code/etckeeper/ ?

从该网站上可以了解到:

etckeeper 是一组工具,可让 /etc 存储在 git、mercurial、darcs 或 bzr 存储库中。它与 apt(以及其他包管理器,包括 yum 和 pacman-g2)连接,以自动提交在软件包升级期间对 /etc 所做的更改。它跟踪文件元数据,这些版本控制系统通常不支持,但对于 /etc 很重要,例如 /etc/shadow 的权限。它非常模块化和可配置,如果您了解版本控制的基础知识,同时也很容易使用。


这还算可以,但对于我的需求并不是完整的解决方案。我只能说这是一种好奇心,但到目前为止,我已经开始自己实现一些东西了(没有复杂到值得发布代码的程度...基本上只是一个监控脚本,检查crontab -l输出与VCS存储库的匹配情况)。 - John Zwinck

0

如果Linux系统遵循LFS(Linux文件系统标准,如果我没记错的话),那么/etc目录应该只包含配置文件。我曾经将整个/etc目录导入到CVS中,效果还不错。

唯一的问题是只有root用户可以提交更改,所以很难确定是谁犯了错误。可以通过为每个管理员分配一个三个字母的简称,并设置规则,要求每次提交必须以此名称开头来解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接