Linux

bash 腳本不是由 cron 執行的

  • July 25, 2014

我有一個非常簡單的 bash 腳本,當我這樣做時可以完美執行

./removeOldBackup.sh

或者

sh /home/myusername/backup/removeOldBackup.sh

但是當我將它添加到 crontab 時

* * * * * sh /home/myusername/backup/removeOldBackup.sh

或者

* * * * * /bin/sh /home/myusername/backup/removeOldBackup.sh

它永遠不會工作……

這是我的腳本:

#!/bin/sh

find . -name 'files_20[1-3][0-9]-[0-9][0-9]-[1-2][1-9]--*' -delete
find . -name 'files_20[1-3][0-9]-[0-9][0-9]-0[2-9]--*' -delete

find . -name 'database_20[1-3][0-9]-[0-9][0-9]-[1-2][1-9]--*' -delete
find . -name 'database_20[1-3][0-9]-[0-9][0-9]-0[2-9]--*' -delete

這是我的腳本權限:

-rwxr-xr-x 1 root root 295 Jul 25 10:07 /home/myusername/backup/removeOldBackup.sh

為 root 使用者添加了 crontab。

這就是我發現的/var/log/syslog

Jul 25 10:11:01 myservername /USR/SBIN/CRON[7583]: (root) CMD (sh /home/myusername/backup/removeOldBackup.sh)

同樣,當我手動執行腳本時,我的備份文件會被正確刪除。當它由 cron 執行時,它們永遠不會被刪除。我正在使用 debian-6.0-x86_64。

為了正式化和擴展某人在評論中所說的內容,當您將某些內容放入 root 的 crontab 中時,它將在裡面執行/root,而不是在腳本所在的目錄中,因為cron甚至不知道那在哪裡。因為您的備份文件不在該目錄樹中,所以該find命令永遠不會到達它們。所以作業正在執行,它只是永遠找不到要刪除的任何文件。提供絕對路徑findcd /home/myusername/backup先添加將解決您的問題。

儘管如此,似乎根本不需要以 root 身份執行這個 cronjob:所有文件都在myusername的主目錄中,並且可能也歸它們所有。為什麼不將您的 cronjob 放在該使用者的 crontab 中呢?執行crontab -emyusername添加與 root 版本完全相同的行。這樣,您就不必以特權使用者身份執行任務(這會自動刪除文件,不少於),並且您還將處於腳本開始的工作位置。

引用自:https://unix.stackexchange.com/questions/146502