Резервное копирование в Selectel

Для сжатия в архив с паролем используем 7zip.

Для CentOS
sudo yum -y install p7zip curl

Для Debian
sudo apt-get install p7zip-full curl

Создаем нужный контейнер в selectel, далее создаем ссылку для загрузки, там в настройках, выставляем пароль, добавляем время загрузки к файлу, отключаем веб интерфейс. Время жизни тут задавать не надо, иначе ссылка на загрузку тоже будет удаляться...

Создаем файл /etc/cron.weekly/backup

#!/bin/bash

# Список каталогов для резервирования через пробел
BACKUP_DIRS="/etc/ /srv/"
# URL selectel.
SELECTEL_URL=http://000000.selcdn.ru/mybackup/myweb-upload
# Пароль selectel.
SELECTEL_PASS=MyPAss
# Пароль на архив, оставьте пустым тогда будет создан архив tag.gz иначе шифрованный 7-zip зип архив
ARCHIVE_PASS=
# Через сколько удалять в секундах
DELETE_AFTER=7776000
# Название файла
BACKUP_NAME=`hostname`
# Указываем путь к скрипту телеграм, если ну указан результаты будут выведены на экран.
#TELEGRAM_PATH=/srv/bin/send_notify.sh

cd /var/backups/

FILE=${BACKUP_NAME}-`/bin/date +%Y-%m-%d`

send_message () {
    if [ -z "${TELEGRAM_PATH}" ]; then
        echo $1
    else
        `echo $1 | ${TELEGRAM_PATH}`
    fi
}

# Если пароль не задан
if [ -z "${ARCHIVE_PASS}" ]; then
    FILE=${FILE}.tar.gz
    tar cfz $FILE $BACKUP_DIRS 2&> /dev/null
else
    FILE=${FILE}.zip
    /usr/bin/7za -bso0 -bsp0 a -tzip -p${ARCHIVE_PASS} -mem=AES256 $FILE $BACKUP_DIRS
fi

exit_status=`curl --write-out "%{http_code}\n"  -i -XPUT ${SELECTEL_URL}?_ssuk=${SELECTEL_PASS} -H "X-Filename: ${FILE}"  -H "X-Delete-After: $DELETE_AFTER" -T $FILE 2>/dev/null | head -n 1 |  awk -F" " '{print $2}'`

if [ $exit_status -ne 201 ]; then  
    send_message "Error backup on ${BACKUP_NAME}"
else
    send_message "Good backup on ${BACKUP_NAME} `du -sh $FILE`"
fi

rm -f $FILE

Выставляем права
chmod 700 /etc/cron.weekly/backup

curl умеет грузить файлы не более 5 гигабайт!

Вот еще пример, как сделать бэкап нескольких каталогов находящихся в одной директории с возможностью исключить некоторые каталоги. Удобно например при бэкапировании большого количества сайтов.

#!/bin/bash

# Список каталогов для резервирования через пробел
BACKUP_DIR="/srv/www/"
# Все что надо исключить, перечисляем через пробел.
EXCLUDE_DIRS="dir1 dir3"
# URL selectel.
SELECTEL_URL=http://000000.selcdn.ru/mybackup/myweb-upload
# Пароль selectel.
SELECTEL_PASS=MyPAss
# Через сколько удалять в секундах
DELETE_AFTER=7776000

cd /var/backups/

for backup_dir in `find ${BACKUP_DIR}/* -maxdepth 0 -type d  | awk -F '/' '{print $NF;}'`
do

    if [ "`echo $EXCLUDE_DIRS | tr ' ' '\n' |grep ^${backup_dir}$`" ]; then
        continue
    fi

    /usr/bin/tar cfj backup_dir.tar.bz2 ${BACKUP_DIR}/${backup_dir} 2> /dev/null

    exit_status=`curl --write-out "%{http_code}\n"  -i -XPUT ${SELECTEL_URL}?_ssuk=${SELECTEL_PASS} -H "X-Filename: ${backup_dir}.tar.bz2"  -H "X-Delete-After: $DELETE_AFTER" -T backup_dir.tar.bz2 2>/dev/null | head -n 1 |  awk -F" " '{print $2}'`

    if [ $exit_status -ne 100 ]; then
        echo "Error backup on ${backup_dir}"
    else
        echo "Good backup on ${backup_dir}"
        du -sh backup_dir.tar.bz2
    fi

    # Удаляем временный файл    
    rm -f backup_dir.tar.bz2
done

[ Править ]

@kiranananda