【问题标题】:How can I version control my projects' cron jobs?如何对项目的 cron 作业进行版本控制?
【发布时间】:2012-09-12 15:37:35
【问题描述】:

我有一堆项目,我用 git 和 fab 推送到服务器。它们是大量的 Django 站点。其中一些网站有 cron 作业。

我想处于我可以的情况:

  • 通过在本地编辑文件并运行 fab 命令来管理站点的 cron 作业(例如 fab save deploy,就像我目前所做的那样)

  • 远程安装新作业(仅)并替换任何旧作业(我不想每次都克隆作业)

  • 保持相同的高度可定制的时间设置。 @hourly 并不是我所有的问题都能解决。

解决这个问题的最佳方法是什么?


我知道How do you deploy cron jobs to production?,但那里的重点似乎是关于将 cronning 入侵到结构脚本中,并且(至少在答案中)没有考虑到每个用户可能有多个项目需要 cron 作业.

我正在寻找存储在 VCS 中的东西(我不会将我的 fabfile 推送到 git - 它在我的所有项目之间共享),它将与 crontab 中的其他作业一起工作。如果 ProjectA 和 ProjectB 每次部署时都覆盖彼此的作业,那就不好了。

【问题讨论】:

  • 我不确定这是否有帮助,但是您是否使用 puppet,并以独立模式在本地运行 puppet?您可以拥有一个包含 cron 作业的所有配置的 puppet 模块,并且 puppet 将负责从 cron 中插入、更新或删除它们。显然,puppet 模块将与其余代码一起在您的 git 存储库中。
  • @Augusto 这种方法的问题类似于仅使用织物。我可以让 fabric 打开一个 cron 文件(存储在 git 中)并将其内容泵出到远程 crontab 但是我该怎么做该过程与多个项目兼容?我不能只是继续追加到 crontab,否则我将拥有一百万个重复作业。
  • 奥利,我不知道面料。 Puppet 不会插入重复的 crontab,因为它为每个条目提供了一个 id(其格式为条目上方的注释)。因此,只要有人不进入框并删除该评论,puppet 就不会插入副本,甚至可以在不再需要它们时将其删除。我刚刚意识到 puppet 不能满足你的第一点,但也许你可以写一些与 puppet 做同样事情的东西,但是远程。
  • 这里有一个脚本可以将您现有的 crons 转换为 puppet 标记:shtuff.it/article/28/…

标签: git version-control cron fabric


【解决方案1】:

所以这是我迄今为止最好的主意:

  • 我所有的项目都在/web/project_name/
  • 任何需要 cronjobs 的项目都将它们粘贴到 /web/project_name/cron
  • 在部署时,fab 在服务器上运行以下命令:

    find /web/ -maxdepth 2 -name cron | xargs cat | crontab
    

这会清理它在/web/ 中找到的所有 cron 文件,并将它们填充到我的用户的 crontab 中。更好的是,如果我有想要运行的项目独立作业,我可以将它们粘贴在 /web/cron 中,它们将位于生成的 crontab 的顶部。

【讨论】:

  • 像这样通过管道连接到 crontab 是行不通的。它需要-,但在设置内容后也不会安装。我曾多次发现并回忆起这一点。
  • @Morgan 这很奇怪,因为它确实在本地工作。也许他们已经在以后的版本中添加了一些东西来阅读stdin
  • 不仅如此,它确实会安装到用户的 crontab 中。我发布的所有内容都适用于 Ubuntu 12.04
  • 我已经看到它填充了用户 crontab 的内容,但没有“安装”它,因为我已经注释掉了一些东西,并让它们继续执行直到我 crontab -e 'd用户的东西。如果这行得通,那就太好了。也许它比我见过的更新,或者 ubuntu 魔法的东西?
【解决方案2】:

我不喜欢编辑 crontab 或每个用户的 cron 作业;任何编辑crontab 的人都可能会弄乱您的部署。相反,我创建了进入/etc/cron.$interval 的脚本,这允许我使用Puppet(参见cron type)或简单的cp 命令来部署它们。

因此,如果我需要一个每天运行一次的脚本,如果我在没有 Puppet 的情况下安装,我要么将其放入 $project/cron/cron.daily/$project

或者,如果你真的需要合并 crontab,你应该为每个脚本添加页眉和页脚,这样很容易看到 crontab 的某些部分来自哪里。页眉/页脚还允许您自动添加/删除每个脚本。

你永远不应该替换整个 crontab,因为有一天,有人会手动编辑它。编辑将一直有效,直到您再次部署,此时它会突然静默失败。

【讨论】:

    猜你喜欢
    • 2015-03-08
    • 2018-02-16
    • 2019-11-03
    • 2023-02-11
    • 2010-09-13
    • 2017-03-10
    • 2019-10-28
    • 2010-10-20
    • 2018-08-14
    相关资源
    最近更新 更多