我有非常smiple脚本做一个备份,并且它运行正常,当我从命令行运行它,但我有问题运行它作为cron工作。
我的cron条目是这样的:(运行它每分钟testingatm)
* * * * * /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)
但是它没有做它应该做的事情,因为备份存档没有被创build。 这是我如何设置文件的权限:
-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
我正在想出哪里可以find任何其他可能是错误的迹象。 我试图在其他post中使用绝对path,脚本可以在没有任何问题的情况下从shell脚本执行。
我试图debugging和注释rm -r行,并注意到$ BACKUP_FOLDER不是首先创build,但我不知道为什么。 我也尝试将crontab更改为su – user / var / hosting ….但它没有帮助。
也许这是我在这里错过的东西,还是有更好的方法呢? 有任何想法吗?
格雷格
我猜cron并没有被所有的sudo
命令所使用。 删除sudo,并以cron的身份运行脚本,至less以具有必要的缺陷的用户身份运行所需的目录。