Fedora
shell 腳本在 cron 中不起作用
我有非常簡單的腳本來進行備份,當我從命令行執行它時它工作正常,但是我在將它作為 cron 作業執行時遇到問題。
我的 cron 條目是這樣的:(每分鐘執行一次以測試 atm)
* * * * * /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…. 但它也沒有幫助。
也許這很明顯我在這裡遺漏了一些東西,或者有更好的方法來做到這一點?有任何想法嗎?
格雷格
我猜 cron 並沒有被所有這些
sudo
命令逗樂。刪除 sudo 並以 root 身份或至少以具有所需目錄的必要權限的使用者身份從 cron 執行腳本。