人们如何部署/版本控制cronjobs到生产?我更关心人们使用的约定/标准,而不是任何特定的解决方案,但我碰巧使用git进行版本控制,并且cronjob正在运行python/django脚本。如何将cron作业部署到生产环境?
回答
如果使用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(免责声明:完全未经测试且不是非常幂等)。
将crontab保存为临时文件。
向tmpfile追加一行。
写回crontab。
这是propably不正是你想做的事,而是沿着你能想到有关检查的crontab到Git和覆盖它与每一个在服务器上部署这些行。 (如果有对你的项目专用的用户。)
你可能可以使用类似的cfengine /厨师部署(它可以部署的一切 - 包括cron作业)
不过,如果你问这个问题 - 它可能因为您有许多生产服务器,每个服务器都运行大量计划作业。 如果是这种情况,您可能需要一种不仅可以部署作业的工具,还可以跟踪成功故障,让您轻松查看上次运行的日志,运行统计数据,让您轻松更改多个作业的时间表和服务器(由于计划的维护...)等。
我使用一个名为“UC4”的商业工具。我不推荐它,所以我希望你能找到一个更好的程序来解决同样的问题。我只是说,当你部署他们时,工作管理不会结束。
如果您使用的Django,看一看的jobs system from django-command-extensions。
的好处是,你可以保持你的工作你的项目结构中,版本控制,用Python写的一切,并配置crontab中只有一次。
使用面料,我宁愿让我的crontab的原始版本在本地,这样,我确切地知道什么是对生产,可以很容易地在除编辑条目添加。
我使用的面料脚本看起来是这样的(一些代码绝密例如采取备份的照顾):
def deploy_crontab():
put('crontab', '/tmp/crontab')
sudo('crontab < /tmp/crontab')
我用Buildout来管理我的Django项目。通过Buildout,我使用z3c.recipe.usercrontab
在部署或更新中安装cron作业。
有真正的手动部署的crontab如果您无法连接你的系统是配置管理系统的cfengine一样/傀儡3个选项。
您可以简单地使用crontab -u用户-e但您冒着复制/粘贴错误的风险。
您还可以将文件复制到cron目录,但没有语法检查的文件,在linux下,你必须按顺序运行触摸的/ var /线轴/ cron的为crond的以皮卡的变化。
注意每个人都会在某些时候忘记touch命令。
在我的经验,这种方法是部署一个crontab我最喜欢的手工方式。
diff /var/spool/cron/<user> /var/tmp/<user>.new
crontab -u <user> /var/tmp/<user>.new
我觉得我上面提到的方法是最好的,因为你不运行的复制/粘贴错误的风险,它可以帮助你维持你的版本控制文件的一致性。它执行文件内部cron任务的语法检查,并且不需要执行touch命令,就如同仅仅复制文件一样。
'部署'一词意味着一个完全自动化的过程。不应该有任何手动触摸,也不会有差异来检查有哪些变化。一个命令会完成整个事情,一段时间。 (例如“fab staging deploy:v1.23”) – 2014-12-10 12:01:46
您还可以看看:
http://django-fab-deploy.readthedocs.org/en/0.7.5/_modules/fab_deploy/crontab.html#crontab_update
Django的晶圆厂部署模块有许多方便的脚本,包括crontab_set和crontab_update
版本控制之下有你的项目,包括您的crontab.txt,是我喜欢的。然后,用Fabric,它是如此简单:
@task
def crontab():
run('crontab deployment/crontab.txt')
这将在deployment/crontab.txt
的内容安装到您连接到服务器的用户的crontab中。如果你没有完整的项目在服务器上,你首先需要put
crontab文件。
- 1. 如何部署reportportal到生产环境
- 2. 如何部署球衣生产环境
- 3. 字体后部署到生产环境
- 4. 如何将Happstack应用程序部署到生产环境?
- 5. 露天环境和生产部署
- 6. 部署工作灯应用到生产环境
- 7. 将EF Core SqlServer数据库部署到生产环境
- 8. 将rails应用程序部署到生产环境
- 9. 将变量从部署传递到生产环境
- 10. 如何将Node.js + webpack捆绑的web应用程序部署到生产环境?
- 11. 自动部署到多个生产环境
- 12. Angular2部署到生产环境中的问题
- 13. 部署本地数据库到生产环境
- 14. 用clojure项目部署到heroku,生产环境问题
- 15. 如何找到部署的环境?
- 16. 如何更改我刚部署到生产的应用程序的rails环境?
- 17. 如何产生ghostcript到node.js环境
- 18. Ruby on Rails:BlueCloth gem在部署到heroku时无法在生产环境中工作
- 19. 部署环境
- 20. 将数据库表部署到asp.net中的生产环境mvc 3
- 21. 将预先加密的配置文件部署到生产环境
- 22. 是否需要将.NET XML文档文件部署到生产环境?
- 23. 将代码合约部署到生产环境中是否不好?
- 24. 如何在App Engine灵活环境中运行长cron作业?
- 25. 如何访问Docker设置环境变量从Cron作业
- 26. Subversion部署到Windows环境
- 27. 将变量导出到生产环境
- 28. 为企业环境部署的原生移动应用程序
- 29. 你如何在生产中部署cron脚本?
- 30. cron作业没有得到环境变量的.bashrc
实际上,如果修改cron行,使用Fabric的append命令不是幂等的。你会以旧线加新线。 – Dave 2011-03-16 20:02:26
创建/ tmp/crondump时,我不得不添加语法来列出crontab,否则它会挂起(在Ubuntu atleast上)。 (即'crontab -l>/tmp/crondump') – joet3ch 2011-03-29 16:03:55
我正在使用此方法在我的生产服务器上安装crontab,但它不工作。它什么都不做,即使当我'SSH'进入服务器并检查'crontab -l'时,一切似乎都没问题。我注意到,如果使用'crontab -e'编辑它,即使我只添加了一个无意义的空间,当我保存文件时,它会显示“安装新的crontab”,然后开始工作。任何想法为什么发生这种情况 – 2012-05-27 18:30:26