2009-02-05 59 views
3

也許這是另一個解決方案。我建立了一個網絡應用程序,需要5-10個cron來保持它和各種間隔。 我想簽入版本控制的crontab,以便它可以很容易地部署到其他服務器 。如何在crontab中委託使用另一個文件作爲crontab?又名Crontab在SVN/CVS中?

我希望能夠把一條線在/ etc/crontab文件 會告訴它尋找到/myapp/app.crontab文件,將所有行 在該文件作爲crontab項.. 。即:

0 1 * * * root /bin/sh /do/something.sh 

爲什麼不直接簽入/ etc/crontab? 因爲從服務器部署到服務器時,某些服務器可能在其crontabs中有不同的 條目,我不想幹涉它們。

任何想法? 什麼是其他人在存儲一堆crontab項在rev ctrl?
謝謝。

回答

4

將你的crontab文件放在/etc/cron.d/中 - 作爲簽出文件或符號鏈接到簽出文件。

+0

如果符號鏈接,則需要確保目標文件具有正確的權限,並且文件更改可能不會被cron注意到。 http://askubuntu.com/questions/54857/can-symlinks-be-used-in-etc-cron-d – 2013-06-17 14:56:08

0

只需添加一個(或很少)項的crontab,並有該條目是一個版本控制腳本調用其他:

0 * * * * /path/to/app/hourly.sh 0 0 * * * /path/to/app/daily.sh 0 1 * * 5 /path/to/app/weekly.sh

hourly.sh然後會調用所有需要完成的每個小時,每天.sh然後會調用每天需要完成的所有事情,等等。

我發現當爲單個應用程序管理大量cron作業時,最好不要所有這些工作都在crontab中懸而未決,因爲這會鼓勵你忽略它們之間的依賴關係,也就是說,一個小時後14分鐘運行的任務取決於在小時後12分鐘運行的任務,但每隔一段時間該任務需要2.1分鐘才能完成,另一個腳本失敗,會給你一個Heisenbug。

另一種方法是編寫自己的守護程序來管理這些任務。

0

我這樣做的方式是將我的crontab文件放在源代碼管理中,然後在我的部署腳本中,用正在部署的內容替換crontab文件。

可以是這樣做的:

crontab filename

或特定用戶(必須爲這個超級用戶權限):

crontab -u my_web_user filename

一個重要的提醒本假設每個用戶只有一個crontab條目,並且它存儲在SCM中。如果其他人編輯服務器上的crontab,那麼在下次部署時這些編輯將會丟失。所以要注意這一點。

1

對於我正在處理的項目中的這個問題,我們採取了非常不同的方法。

我們有一個名爲crontab.pl的Perl腳本,所有服務器都在其crontab中調用。這樣做意味着crontab永遠不必在連續的應用程序部署中進行更改,並且crontab.pl腳本可以愉快地與其他應用程序源文件進行源代碼控制。

我們可以使用命令行參數爲該腳本指定不同的時間間隔。在crontab看起來像這樣:

*/5 * * * * /usr/local/apache/crontab.pl 5 > /var/log/crontab.log 2>&1 # 5 minute interval 
1 * * * * /usr/local/apache/crontab.pl 60 > /var/log/crontab.log 2>&1 # 1 hour interval 
1 1 * * * /usr/local/apache/crontab.pl 3600 > /var/log/crontab.log 2>&1 # 1 day interval 

然後,它只是一個閱讀在命令行時間間隔和運行所需的時間間隔給予的任務問題。