我如何控制项目的cron作业?

Oli*_*Oli 7 git version-control cron fabric

我有一堆项目,我用git和fab推送到服务器.他们是Django网站的负载.其中一些网站有cron工作.

我想处于这样的情况:

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

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

  • 保持相同的高度可自定义的时间设置.并非所有问题都可以通过@hourly来解决.

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


我知道你如何将cron作业部署到生产中?但似乎关注的是将cronning破解成结构脚本并且(至少在答案中)没有考虑可能有多个项目需要每个用户的cron作业.

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

Aar*_*lla 5

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

因此,如果我需要一个每天运行一次的脚本,$project/cron/cron.daily/$project如果我不使用 Puppet 进行安装,我要么将其放入。

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

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


Oli*_*Oli 4

所以这是迄今为止我最好的想法:

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

    find /web/ -maxdepth 2 -name cron | xargs cat | crontab
    
    Run Code Online (Sandbox Code Playgroud)

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