У меня очень простой скрипт для резервного копирования, и он работает нормально, когда я запускаю его из командной строки, но у меня возникают проблемы с его запуском как cron.
Моя запись в cron такова: (запускаю каждую минуту для тестирования банкомата)
* * * * * /var/hosting/ctest/ptest/backup-site.sh > /var/tmp/ctest_ptest_backup_cron2.log
И я вижу в / var / log / cron, что он запускается
Sep 22 11:06:01 devbox CROND[31506]: (gwesio) CMD (/var/hosting/ctest/ptest/backup-site.sh > /var/tmp/ctest_ptest_backup_cron2.log)
Но он не делает того, что должен, потому что резервный архив не создается. Вот как я установил разрешения для файла:
-rwxr-xr-x 1 apache developers 877 2011-09-22 10:11 /var/hosting/ctest/ptest/backup-site.sh
А сам скрипт такой:
#!/bin/sh
PATH=/usr/bin:/bin
TIME=$(date +%Y-%m-%d-%H:%M)
PDIR="/var/hosting/ctest/ptest"
BACKUP_DIR="$PDIR/backups"
BACKUP_FOLDER="$BACKUP_DIR/$(date +%Y-%m-%d-%H%M)"
RESOURCES_DIR="$PDIR/management/html/resources"
sudo mkdir $BACKUP_FOLDER
sudo chown apache:developers $BACKUP_FOLDER
sudo chmod g+w $BACKUP_FOLDER
FILENAME="ctest_ptest-$(date +%Y-%m-%d-%H%M).sql"
PTH="$BACKUP_FOLDER/$FILENAME"
ARCHIVE_FILENAME="$BACKUP_DIR/ctest_ptest-$(date +%Y-%m-%d-%H%M).tgz"
echo "Database backup script execution"
sudo /usr/bin/mysqldump -uuser -ppassword -hlocalhost --databases ctest_ptest > $PTH
echo "Database dump in $PTH"
echo "Resources backup"
sudo /bin/tar czvfP $ARCHIVE_FILENAME $BACKUP_FOLDER $RESOURCES_DIR > /dev/null
echo "Backup file: $ARCHIVE_FILENAME"
echo "Cleanup"
sudo /bin/rm -r $BACKUP_FOLDER
exit 0
У меня заканчиваются идеи, где искать другие признаки того, что может быть не так. Я пытаюсь везде использовать абсолютные пути, как это предлагается в других сообщениях, и сценарий может выполняться без проблем из сценария оболочки.
Я попытался отладить и закомментировал строку rm -r и заметил, что $ BACKUP_FOLDER изначально не создается, но я понятия не имею, почему. Я также попытался изменить crontab на su - user / var / hosting .... но это тоже не помогло.
Может быть, мне здесь не хватает чего-то очевидного, или есть способы лучше? Любые идеи?
Грег
Я думаю, что cron все эти sudo
команды. Удалите sudo и запустите скрипт из cron как root или хотя бы как пользователь с необходимыми правами доступа к нужным каталогам.