我在运行默认 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")
。