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

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

我在运行默认 Debian Linux 的 Amazon ec2 实例上运行一个网站。我设置了一个 cronjob 来复制站点文件、获取数据库印记并对其进行压缩。我想将文件存档保存在与 bash 脚本本身相同的目录中,该目录位于 /var/www/[新目录]/[新目录]/[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 变量?

答案1

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

相关内容