Я запускаю веб-сайт на экземпляре Amazon ec2 с установленным по умолчанию Debian linux. Я установил задание cron для копирования файлов сайта, создания отпечатка базы данных и заархивирования их. Я хочу хранить файловые архивы в том же каталоге, что и сам сценарий 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 (я настраивал crontab с пользователем root).
Есть ли способ заставить этот архив выплюнуть в том же каталоге, что и скрипт, переменную $ CURRPATH?
CURRPATH - это не каталог, в котором находится скрипт, это рабочий каталог, унаследованный скриптом от родительского процесса; для заданий cron это домашний каталог учетной записи, под которой он работает (т.е. ~ root). Если вам нужен каталог, в котором находится скрипт, используйте CURRPATH=$(dirname "$BASH_SOURCE")
вместо.