Резервное копирование в 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
[ Править ]