Bash скрипт архивирования и копирование резервных файлов сайта на Яндекс.Диск.
Продолжение цикла статей по резервному копированию на Яндекс диск по протоколу WebDAV. Там же статья как установить вебдав к себе на сервер.
Примеры скриптов резервного копирования. Там все актуальное и вполне рабочее.
В тех скриптах принцип был следующий: монтировался Яндекс.Диск по WebDAV и туда сразу создавалась копия.
В принципе всё должно работать. Однако на новом хостинге я столкнулся с тем, что при большом архиве где-то файл теряется по дороге.
В этой статье принцип немного другой: мы создаем копию у себя на сервере. Затем монтируем диск и после этого отправляем эту копию на Яндекс.Диск.
Но это тоже ещё не всё. Мы оставляем последний файл у себя на сервере. А предыдущий удаляем. По этой причине создайте у себя какой-нибудь пустой файл, который будет отправной точкой удаления.
Ниже весь скрипт bash с подробным описаниям и пояснениям:
#
# 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
##################
# Удаляет самый старый файл в директории
# ls: t - сортировка по дате изменения, первые в начале
rm -f `ls -t $backups_dir* | tail -1`
# Удаляет резервную копию старше 10 дней на сервере яндекса
/usr/bin/find $yandex_disk -type f -mtime +10 -exec rm {} \;
# UnMount Yandex.Disk
umount /mnt/yandex