Bash
作為 cronjob 執行時,腳本無法按預期工作
首先,以下是每日備份文件的文件名範例:
website-db-backup06-June-2020.tar.gz
通過終端手動執行時,下面的腳本可以正常工作。但是,當腳本通過 cron 執行時,我在電子郵件中收到了這條 cron 守護程序消息:
tar: website-db-backup*: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
這是我每週壓縮所有每日備份的腳本:
#!/bin/bash # # Weekly compression for database backups BACKUP_PATH=~/backup/web/database BACKUP_FILE_DATE=`date '+%d-%B-%Y'` tar -czf $BACKUP_PATH/website-db-weekly-compress$BACKUP_FILE_DATE.tar.gz \ -C $BACKUP_PATH/ website-db-backup* && rm $BACKUP_PATH/website-db-backup*
由於每日備份都有
date
文件名,我必須*
在腳本上使用。這可能是原因嗎?
問題是腳本的目前工作目錄。
website-db-backup*
沒有路徑,所以它在目前目錄中執行。您必須在腳本中添加類似這樣的內容:SOURCE_DIR_PATH='/path/to/backup_source' cd "$SOURCE_DIR_PATH" || exit 1
此外,您應該在執行之前檢查是否有任何匹配的文件
tar
:shopt -s nullglob set -- website-db-backup* test $# -eq 0 && { echo 'ERROR: No matching files; aborting'; exit 1; }
在這種情況下這可能不是問題,但正如 danielleontiev 在評論中指出的那樣,
~
如果該腳本可能由不同的使用者執行,那麼在腳本中使用它是危險的。我建議你用預期的路徑替換它。