Я использую cron, чтобы каждую ночь запускать svn up для каталога файлов, которые мне нужно обновлять локально, пока другие работают над ними. Раньше это работало нормально, с простым:
/ usr / bin / svn up / путь / к / каталогу
Однако с тех пор, как я на днях обновился до OS X Lion, приведенная выше команда отлично работает в оболочке (bash), но когда она запускается из cron, я получаю
Область аутентификации: <https://my-server.com:443> my-server.com Пароль репозитория Subversion для 'my.username': Область аутентификации: <https://my-server.com:443> my-server .com Репозиторий Subversion Имя пользователя: svn: OPTIONS of 'https://my-server.com/path/to/directory': авторизация не удалась: не удалось пройти аутентификацию на сервере: отклонено Базовое задание (https://my-server.com )
Я отчаянно пытался добавить --config-dir к команде, но это не повлияло. В авторизация учетные данные кажутся нормальными, и в любом случае они работают в bash. Я знаю достаточно, чтобы быть опасным, но я исчерпал свой набор инструментов.
Может ли кто-нибудь указать мне правильное направление?
Вероятно, это связано с тем, что тот же env не загружается cron, как в стандартной оболочке. Вы также можете
svn ищет вашу информацию для аутентификации, которая хранится в /home/username/.subversion/auth. Но, как упомянул Майк, env в cron не то же самое, а $ HOME, вероятно, отличается. Попробуйте установить $ HOME перед запуском svn up.
В / etc / crontab:
0 0 * * * username export HOME=/home/username; /usr/bin/svn up /path/to/update
В этой очень связанной теме пользователь публикует неясный синтаксис, который, по-видимому, заставляет 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.