![Cronjobs 将存档放在错误的目录中](https://linux22.com/image/614331/Cronjobs%20%E5%B0%86%E5%AD%98%E6%A1%A3%E6%94%BE%E5%9C%A8%E9%94%99%E8%AF%AF%E7%9A%84%E7%9B%AE%E5%BD%95%E4%B8%AD.png)
我在运行默认 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")
。