2010-12-10 24 views
46

我試圖創建一個cronjob,每分鐘做一個git pull以保持我的生產站點與我的主分支同步。Git使用cronjob自動拉動

由於權限問題,git pull需要由系統用戶nobody完成。但是,似乎nobody帳戶不允許運行命令。所以我必須創建作爲root用戶的任務。

crontab條目我想:

*/1 * * * * su -s /bin/sh nobody -c 'cd ~heilee/www && git pull -q origin master' >> ~/git.log 

它不工作,我不知道如何調試它。

任何人都可以幫忙嗎?

UPDATE1:git pull命令本身是正確的。我可以運行它沒有錯誤。

+0

當你在一個shell中運行命令本身會發生什麼? – Tom 2010-12-11 00:19:51

+0

你有一個名爲'git.log'的用戶嗎? – Dustin 2010-12-11 03:29:11

+0

@Tom它運行,如果我運行命令本身。 – kayue 2010-12-11 04:30:14

回答

24

解決方案:

*/1 * * * * su -s /bin/sh nobody -c 'cd ~dstrt/www && /usr/local/bin/git -q pull origin master' 
+2

在Ubuntu 10上不適用於我。04服務器。 3個不同的錯誤(〜,/ local /和-q都導致問題) – hobs 2012-07-11 18:40:08

+9

'*/1 * * * * su -s/bin/sh nobody -c'cd/home/dstrt/src/project &&/usr/bin/git pull origin master''對我來說效果更好:〜擴展更可靠,不同的路徑可以用於我的發行版,而git的-q選項應該在'pull'之後或者根本不用,否則git barfs。 – hobs 2012-07-12 02:17:47

+0

*/1 * * * */bin/sh -c'cd/path/to/repo &&/usr/bin/git pull -q origin master'爲我工作。 – aaronbauman 2014-08-13 15:55:26

9

雖然您首先需要弄清楚如何讓更新工作,但使用上游的鉤子可以讓它更好。你可以簡單地用post-commit掛鉤捲曲或者如果你使用的是github,只需在它們側面使用後接收掛鉤即可。

+0

鉤子比使用cron更清潔。鉤子只是腳本,所以你可以有'cd/path/to/production && git pull'之類的東西。 – 2010-12-11 03:35:25

+0

我可以運行post-commit hook作爲'nobody'嗎? – kayue 2010-12-11 04:31:08

+0

我試過這個腳本(https://gist.github.com/737188),但有權限問題,因爲運行這個腳本的用戶沒有權限到目標目錄 – kayue 2010-12-11 06:00:22

5
*/1 * * * * su -s /bin/sh nobody -c 'cd /home/heilee/src/project && /usr/bin/git pull origin master' 

可校正從我的系統(Ubuntu的> 10.04服務器)上工作防止接受的答案一對夫婦的錯誤。關鍵變化似乎是pull之後的-q,而不是之前。在註銷/var/log/syslog文件或嘗試運行未更新的生產代碼之前,您不會注意到您的拉動功能無法正常工作。

2
#!/bin/bash 
cd /home/your_folder/your_folder && /usr/bin/git pull [email protected]:your_user/your_file.git 

是已經使用了由我和工作

+0

&&在後臺運行命令。使用 ;而不是&&。按順序運行命令。 – 2017-06-14 05:58:10