2009-10-21 127 views
20

人们如何部署/版本控制cronjobs到生产?我更关心人们使用的约定/标准,而不是任何特定的解决方案,但我碰巧使用git进行版本控制,并且cronjob正在运行python/django脚本。如何将cron作业部署到生产环境?

回答

20

如果使用Fabric为deploment可以添加一个编辑你的crontab的功能。

def add_cronjob(): 
    run('crontab -l > /tmp/crondump')    
    run('echo "@daily /path/to/dostuff.sh 2> /dev/null" >> /tmp/crondump') 
    run('crontab /tmp/crondump') 

这会将作业追加到您的crontab(免责声明:完全未经测试且不是非常幂等)。

  1. 将crontab保存为临时文件。

  2. 向tmpfile追加一行。

  3. 写回crontab。

这是propably不正是你想做的事,而是沿着你能想到有关检查的crontab到Git和覆盖它与每一个在服务器上部署这些行。 (如果有对你的项目专用的用户。)

+0

实际上,如果修改cron行,使用Fabric的append命令不是幂等的。你会以旧线加新线。 – Dave 2011-03-16 20:02:26

+2

创建/ tmp/crondump时,我不得不添加语法来列出crontab,否则它会挂起(在Ubuntu atleast上)。 (即'crontab -l>/tmp/crondump') – joet3ch 2011-03-29 16:03:55

+0

我正在使用此方法在我的生产服务器上安装crontab,但它不工作。它什么都不做,即使当我'SSH'进入服务器并检查'crontab -l'时,一切似乎都没问题。我注意到,如果使用'crontab -e'编辑它,即使我只添加了一个无意义的空间,当我保存文件时,它会显示“安装新的crontab”,然后开始工作。任何想法为什么发生这种情况 – 2012-05-27 18:30:26

1

你可能可以使用类似的cfengine /厨师部署(它可以部署的一切 - 包括cron作业)

不过,如果你问这个问题 - 它可能因为您有许多生产服务器,每个服务器都运行大量计划作业。 如果是这种情况,您可能需要一种不仅可以部署作业的工具,还可以跟踪成功故障,让您轻松查看上次运行的日志,运行统计数据,让您轻松更改多个作业的时间表和服务器(由于计划的维护...)等。

我使用一个名为“UC4”的商业工具。我不推荐它,所以我希望你能找到一个更好的程序来解决同样的问题。我只是说,当你部署他们时,工作管理不会结束。

8

使用面料,我宁愿让我的crontab的原始版本在本地,这样,我确切地知道什么是对生产,可以很容易地在除编辑条目添加。

我使用的面料脚本看起来是这样的(一些代码绝密例如采取备份的照顾):

def deploy_crontab(): 
    put('crontab', '/tmp/crontab') 
    sudo('crontab < /tmp/crontab') 
1

有真正的手动部署的crontab如果您无法连接你的系统是配置管理系统的cfengine一样/傀儡3个选项。

您可以简单地使用crontab -u用户-e但您冒着复制/粘贴错误的风险。

您还可以将文件复制到cron目录,但没有语法检查的文件,在linux下,你必须按顺序运行触摸的/ var /线轴/ cron的为crond的以皮卡的变化。

注意每个人都会在某些时候忘记to​​uch命令。

在我的经验,这种方法是部署一个crontab我最喜欢的手工方式。

diff /var/spool/cron/<user> /var/tmp/<user>.new 
crontab -u <user> /var/tmp/<user>.new 

我觉得我上面提到的方法是最好的,因为你不运行的复制/粘贴错误的风险,它可以帮助你维持你的版本控制文件的一致性。它执行文件内部cron任务的语法检查,并且不需要执行touch命令,就如同仅仅复制文件一样。

+0

'部署'一词意味着一个完全自动化的过程。不应该有任何手动触摸,也不会有差异来检查有哪些变化。一个命令会完成整个事情,一段时间。 (例如“fab staging deploy:v1.23”) – 2014-12-10 12:01:46

0

版本控制之下有你的项目,包括您的crontab.txt,是我喜欢的。然后,用Fabric,它是如此简单:

@task 
def crontab(): 
    run('crontab deployment/crontab.txt') 

这将在deployment/crontab.txt的内容安装到您连接到服务器的用户的crontab中。如果你没有完整的项目在服务器上,你首先需要put crontab文件。

相关问题