使用cronjob进行Git自动拉取

kay*_*yue 53 git cron

我正在尝试创建一个cronjob,其任务是git pull每分钟执行一次,以使我的生产站点与我的主分支同步.

nobody由于权限问题,git pull需要由系统用户完成.但是,似乎该nobody帐户不允许运行命令.所以我必须以root用户身份创建任务.

我试过的crontab条目:

*/1 * * * * su -s /bin/sh nobody -c 'cd ~heilee/www && git pull -q origin master' >> ~/git.log
Run Code Online (Sandbox Code Playgroud)

它不起作用,我不知道如何调试它.

有人可以帮忙吗?

UPDATE1:git pull命令本身是正确的.我可以毫无错误地运行它.

kay*_*yue 31

解:

*/1 * * * * su -s /bin/sh nobody -c 'cd ~dstrt/www && /usr/local/bin/git pull -q origin master' 
Run Code Online (Sandbox Code Playgroud)

  • `*/1****su -s/bin/sh nobody -c'cd/home/dstrt/src/project &&/usr/bin/git pull origin master'`对我来说效果更好:〜扩展更可靠,我的发行版的git路径不同,git的-q选项应该在`pull`之后或者根本没有,否则git barfs. (11认同)
  • `*/1****/bin/sh -c'cd/home/userName/repo &&/usr/bin/git pull -q origin master'`对我来说没关系.我的操作系统是Ubuntu 14.04.02. (6认同)
  • 在ubuntu 10.04服务器上对我不起作用.3个不同的错误(〜,/ local /和-q都会导致问题) (2认同)

Dus*_*tin 11

当你需要弄清楚如何获得更新摆在首位的工作,你会好得多使用钩从上游让它走.您只需使用post-commit钩子卷曲,或者如果您正在使用github,只需使用一个接收后挂钩即可.

  • cron是独立的,不涉及通过Web服务打开潜在的安全漏洞.为什么你认为webhook更好? (4认同)
  • 一个 webhook 仅在更改将 a) 更快地部署更改并且 b) 当出现问题时(即使没有任何变化)不会让您在机器上消耗大量资源的数千个进程。 (2认同)
  • 在 Web 服务器自动旋转的环境中,您甚至不知道 IP 地址是什么 - 即使它会更干净,创建“钩子”也会有复杂的任务,但我投票支持 cron 的简单性 git pull。 (2认同)

Joh*_*ohn 8

从 Git 版本1.8.5(2013 年第 4 季度)开始,您可以使用 -C 参数轻松完成此操作。然后,您不需要 cd 进入 Git 项目目录,而是可以将其指定为 Git 命令的一部分,如下所示:

*/15 * * * * git -C /home/me/gitprojectdir pull
Run Code Online (Sandbox Code Playgroud)


And*_*Wei 6

在撰写此答案时,所有建议的解决方案都以cd“进入工作目录”开头。git-dir就我个人而言,我更愿意这样使用这个论点。

git --git-dir=/path/to/project/.git pull
Run Code Online (Sandbox Code Playgroud)

出于我自己的目的,我使用这个 cron 来使我的本地开发盒与其他开发人员保持同步。因此我使用fetch而不是pull

*/15 * * * * git --git-dir=/home/andey/path/.git fetch -a
Run Code Online (Sandbox Code Playgroud)

为了简化当前接受的解决方案,使用git-dir参数

*/1 * * * * su -s /bin/sh nobody -c '/usr/local/bin/git --git-dir=~dstrt/www pull origin master'
Run Code Online (Sandbox Code Playgroud)


hob*_*obs 5

*/1 * * * * su -s /bin/sh nobody -c 'cd /home/heilee/src/project && /usr/bin/git pull origin master'
Run Code Online (Sandbox Code Playgroud)

这纠正了一些错误,这些错误阻止了我的系统(Ubuntu> 10.04服务器)上接受的答案.关键的变化似乎是在-q之后pull而不是之前.在拖尾/var/log/syslog文件或尝试运行未更新的生产代码之前,您不会注意到您的拉动不起作用.