Debian

Cronjobs 將存檔放在錯誤的目錄中

  • July 5, 2013

我在執行預設 Debian linux 的 Amazon ec2 實例上執行一個網站。我設置了一個 cronjob 來複製站點文件,獲取數據庫印記,然後將它們壓縮。我想將文件存檔保存在與 bash 腳本本身相同的目錄中,該目錄位於 /var/www/ 的深處

$$ a new directory $$/$$ a new directory $$/$$ etc $$/。我創建了一個 mysql 使用者,它只能讀取和轉儲數據庫,但不能寫入。 腳本如下

#/bin/bash

CURRPATH=$(pwd)
SITEPATH="/var/www/html"

MYSQLUSER="user"
MYSQLPASS="password"
MYSQLDB="database"

CURRDATE=$(date +"%Y-%m-%d__%T_%p")
DATETAG="Backup_$CURRDATE"
TEMPDIR="$CURRPATH/$DATETAG"
ARCHIVENAME="$DATETAG.zip"

# I first copy the files so I can stick a database imprint in the same directory
cp -r  "$SITEPATH/" "$CURRPATH/"
mv "$CURRPATH/html" "$TEMPDIR"
mysqldump -u "$MYSQLUSER" -p"$MYSQLPASS" "$MYSQLDB" > "$TEMPDIR/BackupDB_$CURRDATE.sql"

cd $CURRPATH
zip -r "$ARCHIVENAME" "$DATETAG"
rm -rf "$TEMPDIR"

我用 crontab 設置它,它工作得很好,除了一個問題 - 存檔最終在 ~/root 文件夾中(我用 root 使用者設置了 crontab)。

有沒有辦法讓這個存檔與腳本在同一目錄中吐出,$CURRPATH 變數?

CURRPATH 不是腳本所在的目錄,它是腳本從其父程序繼承的工作目錄;對於 cron 作業,這是執行它的帳戶的主目錄(即 ~root)。如果您想要腳本所在的目錄,請CURRPATH=$(dirname "$BASH_SOURCE")改用。

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