как запустить svn update через svn post-commit hook

Цель: обновить /var/www последним при фиксации svn.

сервер ubuntu 10.10, последний apache2, последний svn, местоположение: /var/svn/[projectname]

Для этого я создал простой скрипт после фиксации:

#!/bin/bash

#tests if www-data user runs this script on commit (which it does)
touch /tmp/test.log

#works when run from the command line (sudo ./post-commit) but not when run by www-data
sudo /usr/bin/svn update /var/www

Чтобы решить проблему с тем, что вторая команда не работает как www-данные, я попытался...

Редактирование: sudo visudo и добавлено (в конце): www-data ALL=(ALL) NOPASSWD:ALL

Чоунинг: с /var/www по www-data:www-data

Чмодинг: все от /var/www до 777

Все еще не повезло... есть идеи?


person JOHN    schedule 02.12.2010    source источник
comment
Какую ошибку вы получаете? cron должен отправлять любые выходные данные stderr по электронной почте.   -  person nobody    schedule 03.12.2010


Ответы (2)


Что, если вы запустите это:

  su - www-data -c '/usr/bin/svn update /var/www'

(sudo не требуется, если /var/www/ равен 777 и принадлежит www-data..)

Как пользователь root? (затем он suid()s как www-данные и запускает команду). Это должно дать больше информации о том, что на самом деле терпит неудачу.

Или вы можете попробовать зарегистрировать вывод svn update из вашего хука post-commit:

/usr/bin/svn update /var/www &> /tmp/my-svn-update.log

Я думаю, что эти два теста должны дать вам больше информации о том, что произошло.

ПРИМЕЧАНИЕ: я не уверен, что вы действительно хотите рисковать тем, что www-data может запускать любую команду от имени пользователя root. Если вам абсолютно необходимо запустить svn от имени пользователя root ( Я не вижу в этом смысла, но это может быть), просто используйте это в своем /etc/sudoers:

www-data ALL=NOPASSWD: /usr/bin/svn
person redShadow    schedule 02.12.2010

Сначала я использовал механизм ведения журнала, который вы предложили, и это помогло его исправить! Спасибо!

Выведенная ошибка как-то связана с именем файла в репродукции, которое невозможно преобразовать в UTF-8. Я удалил файл и все заработало. Но почему это сработало при прямом вызове post-commit... Понятия не имею.

Кстати, я ошибся в том, что это bash (это был sh), поэтому мне пришлось изменить &> на 2>

Кроме того, я удалил проверенные файлы, восстановил права доступа и владельца до нормального состояния в /var/www, а затем снова проверил их.

моя последняя строка sudoers:

www-data ALL=NOPASSWD:/usr/bin/svn update /var/www

Большое спасибо за помощь!

person JOHN    schedule 03.12.2010