Cronjobs 将存档放在错误的目录中

Nic*_*nch 1 debian bash cron shell-scripting

我正在运行默认 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"
Run Code Online (Sandbox Code Playgroud)

我用 crontab 设置了这个,它完美地工作,除了一个问题 - 存档最终在 ~/root 文件夹中(我用 root 用户设置了 crontab)。

有没有办法让这个存档在与脚本相同的目录中吐出, $CURRPATH 变量?

Gor*_*son 6

CURRPATH 不是脚本所在的目录,而是脚本从其父进程继承的工作目录;对于 cron 作业,这是它在其下运行的帐户的主目录(即 ~root)。如果您想要脚本所在的目录,请CURRPATH=$(dirname "$BASH_SOURCE")改用。