BASH скрипт для бекапа всех сайтов на хостингах NIC.ru и REG.RU

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