For reference, I'm running CentOS 5.5 on the server.
我正在与其他几位开发人员一起开发一个分布式项目,我们使用 Git 来管理我们的存储库。一切都在 Gitorious 上实时托管并且运行良好。但是,我们的存储库中需要一个分支来与外部 Subversion 存储库保持同步——有点像 Git 中的“供应商分支”。原因是:我们正在基于这个现有的开源项目 (WordPress) 构建一些东西,并希望我们的工作副本继承他们在自己的 repo 中发布的任何错误修复。
我已经设置好了,这样我们就有了一个名为“wordpress”的独立分支,它可以与实时 Subversion 存储库保持同步。要做到这一点,很简单:
git checkout wordpress
git svn rebase
git gc
git push origin wordpress
这些命令将:
- 确保我们在 WordPress 分支上
- 将分支与实时 Svn 存储库重新同步
- 运行垃圾收集(否则存储库会逐渐变得难以管理)
- 将更新的分支推送到我们在 Gitorious 上的托管存储库
每当 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)
但是除非我登录并手动运行脚本,否则什么都不会发生。想法?
最佳答案
Cron 在登录 shell 之外的另一个环境中运行,因此可能的错误是 git 不在路径中。最简单的通常是使用 crontab 中每个命令的完整路径(/usr/bin/git 或安装 git 的任何地方)。
cron 运行的脚本中的错误通常会邮寄给用户,因此请尝试查看 root 的邮箱。
关于cron - 如何通过 cron 同步 Git-Svn 克隆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4899827/