Fedora

shell 腳本在 cron 中不起作用

  • September 22, 2011

我有非常簡單的腳本來進行備份,當我從命令行執行它時它工作正常,但是我在將它作為 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 執行腳本。

引用自:https://serverfault.com/questions/314310