Как мне синхронизировать клон Git-Svn через cron? - PullRequest
3 голосов
/ 04 февраля 2011

Для справки, я запускаю CentOS 5.5 на сервере.

Я работаю над распределенным проектом с несколькими другими разработчиками, и мы используем Git для управления нашими репозиториями. Все размещено в прямом эфире на Gitorious и работает прекрасно. Однако нам нужна ветка в нашем репозитории, чтобы синхронизироваться с внешним репозиторием Subversion - что-то вроде «ветки вендора» в Git. Причина в том, что мы строим несколько вещей на основе этого существующего проекта с открытым исходным кодом (WordPress) и хотим, чтобы наша рабочая копия наследовала все исправления, которые они публикуют в своем собственном репо.

У меня все настроено так, что у нас есть отдельная ветка под названием «wordpress», которую можно синхронизировать с живым репозиторием Subversion. Для этого все просто:

git checkout wordpress
git svn rebase
git gc
git push origin wordpress

Эти команды будут:

  1. Убедитесь, что мы находимся в ветке WordPress
  2. Повторная синхронизация ветки с живым репозиторием Svn
  3. Запустить сборку мусора (в противном случае хранилище постепенно становится неуправляемо большим)
  4. Вставьте обновленную ветку в наш размещенный репозиторий на 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 (безуспешно), используя интерфейс Webadmin в CentOS, чтобы добавить его как почасовой скрипт (безуспешно), и теперь я в растерянности! Мои системные журналы утверждают , что они запускаются (журнал ниже):

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)

Но на самом деле ничего не произойдет, если я не войду в систему и не выполню скрипт вручную. Идеи?

Ответы [ 2 ]

2 голосов
/ 04 февраля 2011

Cron работает с другой средой, отличной от оболочки входа в систему, поэтому вероятной ошибкой является то, что git не находится в пути.Обычно проще всего использовать полный путь каждой команды в crontab (/ usr / bin / git или где бы ни был установлен ваш git).

Ошибки в скриптах, запускаемых cron, обычно отправляются пользователю по почте, поэтомупопробуйте заглянуть в почтовый ящик root.

0 голосов
/ 04 февраля 2011

Вы используете свои сайты как root? Вы вручную запускаете скрипт как root? Я надеюсь, что нет.

Теперь посмотрите на вывод cron: он запускает ваш скрипт из учетной записи root и, вероятно, не может найти репозиторий. Добавьте его в crontab вашего аккаунта, а не в root.

...