Назад | Перейти на главную страницу

Cronjobs помещает архив в неправильный каталог

Я запускаю веб-сайт на экземпляре 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") вместо.