Личная необходимость вынудила разобраться и написать скрипт для автоматизации бекапов под хостинг 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