10

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

我希望能够:

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

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

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

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


我知道您如何将 cron 作业部署到生产环境?但是那里的重点似乎是关于将 cronning 入侵到结构脚本中,并且(至少在答案中)没有考虑到每个用户可能有多个项目需要 cron 作业。

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

4

2 回答 2

5

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

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

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

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

于 2012-09-20T12:38:01.273 回答
4

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

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

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

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

于 2012-09-20T10:53:17.530 回答