Резервная копия файлов сайта на Яндекс.Диск

Admin Bash (Unix) Обсудить

Bash скрипт архивирования и копирование резервных файлов сайта на Яндекс.Диск.

Продолжение цикла статей по резервному копированию на Яндекс диск по протоколу WebDAV. Там же статья как установить вебдав к себе на сервер.

Примеры скриптов резервного копирования. Там все актуальное и вполне рабочее.

В тех скриптах принцип был следующий: монтировался Яндекс.Диск по WebDAV и туда сразу создавалась копия.

В принципе всё должно работать. Однако на новом хостинге я столкнулся с тем, что при большом архиве где-то файл теряется по дороге.

С недавних пор у Яндекса поменялась политика в компании по отношению к использования Яндекс Диска. Они теперь ограничивают подобные вещи. Якобы Яндекс диск создан для домашнего использования, а резервные копии — это инфраструктурные задачи. Поэтому большие бэкапы могут обрываться, но бэкапы до полтора гигабайта пока всё ещё копируются.

В этой статье принцип немного другой: мы создаем копию у себя на сервере. Затем монтируем диск и после этого отправляем эту копию на Яндекс.Диск.

Но это тоже ещё не всё. Мы оставляем последний файл у себя на сервере. А предыдущий удаляем. По этой причине создайте у себя какой-нибудь пустой файл, который будет отправной точкой удаления.

Ниже весь скрипт bash с подробным описаниям и пояснениям:

#!/bin/sh
#
# Backup sites and copy to Yandex.Disk

##################
# Create archive
##################

date=`date +"%Y_%m_%d_%H:%M"`
filename='backup-sites_'$date'.tar.gz'

server_path='/home/admin/'

backups_dir=$server_path'backups/'

dir_for_backup='web'

# Create archive gzip
# c - создает новый файл
# z - создать gzip из архива .tar
# v — показать прогресс создания файла .tar.
# f — сообщает команде, что следующим аргументом является имя файла архива
# C - перейти в директорию
/usr/bin/tar -czvf $backups_dir$filename -C $server_path $dir_for_backup

##################
# Copy to Yandex
##################

# Mount Yandex.Disk
mount -t davfs https://webdav.yandex.ru /mnt/yandex/

# Path on Yandex.Disk
yandex_disk='/mnt/yandex/backups/sites'

# Copy to yandex server
# t - сортировка по дате изменения, первые в начале
# r - обратный порядок при сортировке
# 1 - отображать по одному файлу на строку
cp `ls -tr1 $backups_dir/* | tail -1` $yandex_disk

##################
# Clean
##################

# Remove oldest file in the backup directory on our server
rm -f `ls -t $backups_dir* | tail -1`

# Delete backup file older than 10 days on yandex server
/usr/bin/find $yandex_disk -type f -mtime +10 -exec rm {} \;

# UnMount Yandex.Disk
umount /mnt/yandex

Привет. Ты находишься на моём сайте. Я разработчик. Здесь я делюсь своими наработками и знаниями. Спрашивай в комментариях, если тебе что-то не понятно или пиши, если есть что добавить.

Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи: "Резервная копия файлов сайта на Яндекс.Диск"
Если вам нужно добавить участок кода ставьте его между тегами <code></code>