作为参考,我在服务器上运行CentOS 5.5。
我正在与其他几位开发人员合作开发分布式项目,我们正在使用Git来管理我们的存储库。一切都在Gitorious上进行,并且工作得非常好。但是,我们需要在我们的存储库中使用一个分支来与外部Subversion repo保持同步 - 有点像Git中的“供应商分支”。原因是:我们正在基于这个现有的开源项目(WordPress)构建几个东西,并希望我们的工作副本继承他们在自己的repo中发布的任何错误修正。
我已经设置好了,所以我们有一个名为“wordpress”的独立分支,可以与现有的Subversion repo保持同步。为此,它就像:
一样简单git checkout wordpress
git svn rebase
git gc
git push origin wordpress
这些命令将:
只要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 :(得分:2)
Cron运行的是另一个环境,而不是登录shell,所以可能的错误是git不在路径中。最简单的方法通常是使用crontab中每个命令的完整路径(/ usr / bin / git或安装git的地方)。
cron运行的脚本中的错误通常会邮寄给用户,因此请尝试查看root的邮箱。
答案 1 :(得分:-1)
您的网站是root
吗?您是否以root
手动运行脚本?我希望你不要。
现在看看cron输出:它从root帐户运行你的脚本,它可能无法找到存储库。将其添加到您帐户的crontab,而不是root用户。