我有一个非常简单的脚本来进行备份,当我从命令行运行它时它工作正常,但是我在将它作为 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
我不知道该去哪里寻找其他可能出错的迹象。我正尝试像其他帖子中建议的那样在任何地方使用绝对路径,并且可以从 shell 脚本中毫无问题地执行脚本。
我尝试调试并注释掉 rm -r 行,发现 $BACKUP_FOLDER 根本没有被创建,但我不知道为什么。我还尝试将 crontab 更改为 su - user /var/hosting.... 但也没有用。
也许这是我忽略了的某些明显的东西,或者有更好的方法吗?有什么想法吗?
格雷格
答案1
我猜 cron 对这些命令并不感兴趣sudo
。删除 sudo 并以 root 身份或至少以对所需目录具有必要权限的用户身份从 cron 运行脚本。