人們如何部署/版本控制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. 如何部署球衣生產環境
- 2. 將rails應用程序部署到生產環境
- 3. 如何將Node.js + webpack捆綁的web應用程序部署到生產環境?
- 4. 如何更改我剛部署到生產的應用程序的rails環境?
- 5. 如何產生ghostcript到node.js環境
- 6. Ruby on Rails:BlueCloth gem在部署到heroku時無法在生產環境中工作
- 7. 將代碼合約部署到生產環境中是否不好?
- 8. 將預先加密的配置文件部署到生產環境
- 9. 是否需要將.NET XML文檔文件部署到生產環境?
- 10. Subversion部署到Windows環境
- 11. cron作業沒有得到環境變量的.bashrc
- 12. 如何部署到生產webpack + Rails?
- 13. 多個部署環境(生產/舞臺/等)和Facebook應用
- 14. Rails環境部署(開發/測試和生產)
- 15. 我的SSIS清單不允許在生產環境中部署
- 16. 在生產環境中部署Grails。 (Hibernate嘗試更新架構)
- 17. 在生產環境中部署WCF服務
- 18. Angular2 - 不能在生產環境中部署
- 19. Rails的Capistrano的 - 每當追加的Cron cron作業,每部署
- 20. 需要將MVC App部署到生產
- 21. 使用適當的環境變量部署Web作業
- 22. ClickOnce部署到生產
- 23. git +部署到生產
- 24. Rails生產環境
- 25. 如何將Azure API管理部署到不同的環境
- 26. 如何將powershell模塊發佈到生產環境?
- 27. Sharepoint 2010 - 在生產環境中部署Visual Studio工作流程時出錯
- 28. 本地,分段和生產環境的部署工作流程(EngineYard)
- 29. 在GAE上部署cron作業時發生內部服務器錯誤
- 30. 如何在沒有完整源代碼的情況下將django服務器部署到生產環境中?
實際上,如果修改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