2010-12-10 100 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