我正在尝试创建一个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)
Dus*_*tin 11
当你需要弄清楚如何获得更新摆在首位的工作,你会好得多使用钩从上游让它走.您只需使用post-commit钩子卷曲,或者如果您正在使用github,只需使用一个接收后挂钩即可.
从 Git 版本1.8.5(2013 年第 4 季度)开始,您可以使用 -C 参数轻松完成此操作。然后,您不需要 cd 进入 Git 项目目录,而是可以将其指定为 Git 命令的一部分,如下所示:
*/15 * * * * git -C /home/me/gitprojectdir pull
Run Code Online (Sandbox Code Playgroud)
在撰写此答案时,所有建议的解决方案都以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)
*/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文件或尝试运行未更新的生产代码之前,您不会注意到您的拉动不起作用.