почему мой скрипт оболочки резервного копирования SVN, отлично работает в терминале, но не работает в crontab? - PullRequest
1 голос
/ 27 декабря 2010

У меня есть скрипт резервного копирования SVN в RedHat Linux.пусть он называется svnbackup.sh

Работает нормально, когда я запускаю его в терминале.

Но когда я помещаю его в crontab, он не возвращает svnserve обратно, даже если данные резервируютсяправильно.

Что со мной не так ???

killall svnserve
tar -zcf /svndir /backup/
svnserve -d -r /svndir

Ответы [ 2 ]

3 голосов
/ 27 декабря 2010

Обычно «environment» - это проблема в задании cron, которое работает при запуске «в терминале», а не когда оно запускается cron.Скорее всего, ваш PATH не настроен на включение каталога, в котором вы храните svnserve.

Либо используйте абсолютный путь для svnserve, либо установите PATH соответствующим образом в сценарии.

Вы можете отлаживать,частично, добавив строку, такую ​​как:

env > /tmp/cron.job.env

, к вашему сценарию, чтобы точно определить, насколько мало задано окружение при запуске вашего задания cron.

0 голосов
/ 27 декабря 2010

Если вы пытаетесь сделать резервную копию действующей версии хранилища, вам, вероятно, следует использовать svnadmin hotcopy. Тем не менее, вот несколько вариантов, которые приходят на ум в отношении того, что может быть не так:

  1. Вы поместили каждое из этих утверждений как отдельные записи в ваш crontab (не могу сказать из Q).
  2. Команда svnserve принимает пароль, который cron, в свою очередь, не может предоставить.
  3. Команда svnserve блокирует или зависает на неопределенный срок и убивается cron.
  4. Команда svnserve отсутствует в вашем PATH в cron.

Предполагая, что svnserve не принимает пароль, это может решить проблему:

#! /bin/bash
#  backup_and_restart_svnserve.sh
export PATH=/bin:/sbin:/usr/bin:/usr/local/bin # set up your path here
killall svnserve && \
tar -zcf /svndir /backup/ && \
svnserve -d -r /svndir >/dev/null 2>&1 &

Теперь используйте «backup_and_restart_svnserve.sh» в качестве скрипта для выполнения. Поскольку он работает в фоновом режиме, он, как мы надеемся, продолжит работать, даже когда cron выполнит следующую задачу.

...