Bash

作為 cronjob 執行時,腳本無法按預期工作

  • June 9, 2020

首先,以下是每日備份文件的文件名範例:

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 在評論中指出的那樣,~如果該腳本可能由不同的使用者執行,那麼在腳本中使用它是危險的。我建議你用預期的路徑替換它。

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