2011-02-04 66 views
3

僅供參考,我在服務器上運行CentOS 5.5。如何通過cron同步Git-Svn克隆?

我正與其他幾位開發人員一起開發分佈式項目,我們正在使用Git來管理我們的存儲庫。所有東西都在Gitorious上生活,並且工作得很好。但是,我們需要在我們的存儲庫中有一個分支,以便與外部Subversion回購庫保持同步 - 就像Git中的「供應商分支」一樣。原因是:我們正在基於現有的開源項目(WordPress)構建幾件事情,並希望我們的工作副本繼承它們在其自己的回購庫中發佈的任何錯誤修正。

我已經設置了一些東西,以便我們有一個名爲「wordpress」的獨立分支,可以與現場Subversion回購庫保持同步。要做到這一點,它是那樣簡單:

git checkout wordpress 
git svn rebase 
git gc 
git push origin wordpress 

這些命令:

  1. 確保我們在WordPress的分支
  2. 重新同步與實時svn的分支
  3. 運行垃圾收集(否則庫逐漸變得難以管理大)
  4. 將更新的分支推送到我們在Gitorious上的託管存儲庫

每當WordPress主幹更新時運行這四個命令都很簡單,但這很麻煩,而且很麻煩。我很樂意將其設置爲cron工作,但我似乎無法弄清楚如何!

我寫了一個名爲wordpress.sh腳本,並將其放置在/etc/文件夾在服務器上:

#!/bin/bash 
cd /var/www/git/wordpress 
git checkout wordpress 
git svn rebase 
git gc 
git push origin wordpress 

運行該腳本就好了。我可以SSH進入我的服務器,以root身份登錄,並輸入. /etc/wordpress.sh,一切正常。但是我怎麼能設置這個以使cron能爲我做些事情?

我試過手動將它添加到crontab(失敗),在CentOS中使用Webadmin界面將它添加爲小時腳本(失敗),現在我不知所措!我的系統日誌要求,它的發射(下面登錄):

Feb 4 07:00:01 ---- crond[27745]: (root) CMD (/etc/wordpress.sh #WordPress mirror) 
Feb 4 07:01:01 ---- crond[27773]: (root) CMD (run-parts /etc/cron.hourly) 
Feb 4 08:00:01 ---- crond[29095]: (root) CMD (/etc/wordpress.sh #WordPress mirror) 
Feb 4 08:01:01 ---- crond[29142]: (root) CMD (run-parts /etc/cron.hourly) 
Feb 4 09:00:01 ---- crond[29708]: (root) CMD (/etc/wordpress.sh #WordPress mirror) 
Feb 4 09:01:01 ---- crond[29718]: (root) CMD (run-parts /etc/cron.hourly) 
Feb 4 10:00:01 ---- crond[30328]: (root) CMD (/etc/wordpress.sh #WordPress mirror) 
Feb 4 10:01:01 ---- crond[30337]: (root) CMD (run-parts /etc/cron.hourly) 

但沒有真正發生,除非我登錄並手動運行該腳本。想法?

+0

我也試過使用命令`。/etc/wordpress.sh`在cron作業中,但沒有做任何不同的事情。 – EAMann 2011-02-04 15:41:41

+0

對於那些對如何最終來到解決方案(基於@ ygram的建議)進行更長時間討論感興趣的人,請查看我博客上的後續文章:http://eam.me/e1 – EAMann 2011-02-15 20:41:29

回答

2

Cron與另一個環境運行而不是登錄shell,所以可能的錯誤是git不在路徑中。最簡單的方法通常是使用crontab中的每個命令的完整路徑(/ usr/bin/git或者安裝git的地方)。

由cron運行的腳本中的錯誤通常會郵寄給用戶,因此請嘗試查看root的郵箱。

-1

您是否將您的網站設置爲root?你是否手動運行腳本爲root?我希望你不要。

現在看看cron輸出:它從root帳戶運行腳本,並且可能無法找到存儲庫。將它添加到您的帳戶的crontab中,而不是root的。

+0

當我寫這篇文章時,我對系統的唯一帳戶是`root`。告訴我不要以「root」身份運行通常是一個好主意,但它根本無助於我解決問題。 – EAMann 2011-02-06 22:12:24