Команда SVN работает в оболочке, но не в cron. Почему бы и нет?

Я использую cron, чтобы запускать 'svn up' по ночам для каталога файлов, которые мне нужно обновлять локально, пока другие работают над ними. Раньше это работало нормально, с простым:

/ usr / bin / svn up / путь / к / каталогу

Однако, с тех пор, как я обновил OS X Lion на днях, приведенная выше команда прекрасно работает в оболочке (bash), но когда она запускается из cron, я получаю

Область аутентификации: my-server.com Пароль хранилища Subversion для 'my.username': Область аутентификации: my-server Имя пользователя хранилища.com Subversion: svn: ОПЦИИ 'https://my-server.com/path/to/directory': авторизация не пройдена: не удалось пройти аутентификацию на сервере: отклонено базовое задание (https://my-server.com)

Я отчаянно пытался добавить --config-dir к команде, но это не имело никакого эффекта. Учетные данные аутентификации кажутся хорошими, и в любом случае они работают в bash. Я знаю достаточно, чтобы быть опасным, но я нахожусь в конце моего набора инструментов здесь.

Может ли кто-нибудь указать мне правильное направление?

5 ответов

svn ищет вашу информацию для аутентификации, которая сохраняется в /home/username/.subversion/auth. Но, как отметил Майк, env не совпадает с env, и $HOME, вероятно, отличается. Попробуйте установить $HOME перед запуском 'svn up'.

В /etc/crontab:

0 0 * * * username export HOME=/home/username; /usr/bin/svn up /path/to/update

Вероятно, это связано с тем, что тот же самый env не загружается cron, как в стандартной оболочке. Вы также можете

  1. источник.bashrc или есть скрипт, который делает все это для вас
  2. используйте полное имя приложения, а не простую команду, которую вы можете использовать, потому что /usr/bin находится в $PATH

В этой очень связанной теме пользователь публикует некоторый неясный синтаксис, который, очевидно, заставляет работать ssh-agent. Этот поток не специфичен для svn, но, похоже, это та же проблема. https://apple.stackexchange.com/questions/18832/ssh-under-cron-stops-working-in-os-x-10-7-lion

Создайте новый скрипт оболочки, содержащий вашу команду SVN. Затем поместите что-то вроде этого в cron:

/bin/bash /path/to/your/script.sh

Это обеспечит работу вашей команды в оболочке bash.

На OSX вы не должны использовать cron вы должны использовать launchd а также launchctl,

Вот хорошая статья, которая описывает OSX способ выполнения запланированных заданий.

Другие вопросы по тегам