Личная необходимость вынудила разобраться и написать скрипт для автоматизации бекапов под хостинг NIC.ru.
Выкладываю:
Конфиг файл со списком сайтов и соответствующих БД
В моём примере этот файл называется sites.smart. Имя этого файла важно, потому что скрипт будет искать конфиг по имени.
domain1.ru:db_for_site_1 domain2.ru:db_for_site_2 domain3.ru:db_for_site_3 domain4.ru:db_for_site_4
И собственно сам скрипт backup.smart.sh. Работает с абсолютными путями, поэтому класть можно куда угодно.
Важный момент: скрипт специально для архивации MODX удаляет у каждого сайта папку с кэшем "/core/cache/".
Архивируются и статичные файлы и дамп БД. Складываются в папку "/home/идентификатор_услуги_хостинга/backups/".
#!/bin/bash
# Config
base="/home/идентификатор_услуги_хостинга"
dbhost="хост_БД"
dbuser="пользователь_БД"
dbpass="пароль_БД"
# Init
#rnd=$RANDOM
time=$(date +%H-%M-%S)
date=$(date +%Y-%m-%d)
index=0
while read line; do
arrList[$index]="$line"
index=$(($index+1))
done < sites.smart
echo "START BACKUP:"
for ((a=0; a < ${#arrList[*]}; a++))
do
str=${arrList[$a]}
arrRow=(${str//:/ })
site=${arrRow[0]}
db=${arrRow[1]}
i=$(($a+1))
echo "BACKUP #$i ($site):"
path="$base/$site/"
cd $path
folder="$site-$date=$time.bck"
savepath="$base/backups/$folder"
rm -rf docs/core/cache #clean cache
mkdir -p $savepath
mysqldump -h$dbhost -u$dbuser -p$dbpass $db > $savepath/dump-$db-$date=$time.sql #dump database
zip -r $savepath/archive_$date=$time.zip docs # archive files
done
echo "BACKUPS DONE."
exit 0
Ну и конечно же не забудьте сделать файл скрипта исполняемым.
UPDATE: 13.03.2014
Написал модификацию скрипта для шаред-хостинга REG.RU. Идёт один файлом, перечень сайтов и соответствующих им баз данных указываются прямо в скрипте (не в отдельном файле) в разделе # Config
#!/bin/bash
# Config
#-------------------------------
base="/var/www/u0000000/data"
dbhost="localhost"
dbuser="u0000000_usr"
dbpass="XXXXXXXX"
# Sites list
# site_name:db_name
arrList[0]="site_name.ru:u0000000_site_db"
# Init
#-------------------------------
ROOT_PATH=$(cd $(dirname $0) && pwd);
#rnd=$RANDOM
time=$(date +%H-%M-%S)
date=$(date +%Y-%m-%d)
echo "START BACKUP:"
for ((a=0; a < ${#arrList[*]}; a++))
do
str=${arrList[$a]}
arrRow=(${str//:/ })
site=${arrRow[0]}
db=${arrRow[1]}
i=$(($a+1))
echo "BACKUP #$i ($site):"
path="$base/www/$site/"
cd $path
rm -rf core/cache #clean cache
folder="$site-$date=$time.bck"
savepath="$base/backups/$folder"
mkdir -p $savepath
mysqldump -h$dbhost -u$dbuser -p$dbpass $db > $savepath/dump-$db-$date=$time.sql #dump database
cd "$base/www/"
zip -r $savepath/archive_$date=$time.zip $site # archive files
done
echo "BACKUPS DONE."
exit 0