Скрипт бэкапа файлов

Материал из Викиадмин
Перейти к навигации Перейти к поиску

Если нам нужен простой скрипт бэкапа файлов, который можно задать в cron, то можно сделать примерно таким образом.

(Вы еще не делаете бэкапов? Тогда мы берем молоточки для жестких дисков и идем к вам!)

Ротационный backup (резервное копирование) файлов и папок

Создадим у себя папку, где будут храниться бэкапы. По сути, вы можете указать любое место, которое вам нравится. В нашем случае мы создадим папку в домашней директории пользователя user. Хотя я бы рекомендовал для этих дел все-таки завести отдельное хранилище.:

mkdir /home/user/backups

Копируем данный текст скрипта в любой файл, который вам нравится, например backup_site. В данном тексте мы укажем сначала переменные, указывающие что копировать, куда копировать и что пропустить (в нашем случае мы копируем wikiadmin.net в backup и не трогаем cache):

#!/bin/bash
#указываю переменные: куда копировать, что копировать и какую папку не копировать (например, с временными файлами)
export BACKUP_FOLDER="/home/user/backups"
export TARGET="/var/www/html/wikiadmin.net"
export EXCLD="cache"

#ротация
rm -rf $BACKUP_FOLDER/03
mv $BACKUP_FOLDER/02 $BACKUP_FOLDER/03
mv $BACKUP_FOLDER/01 $BACKUP_FOLDER/02
mkdir $BACKUP_FOLDER/01 

#сама архивация
tar cvjf $BACKUP_FOLDER/01/site-wikiadmin.net-`date +%Y-%m-%d-%H-%M-%S`.tar.bz2 $TARGET --exclude=$EXCLD
#эта строка нужна, чтобы крон на почту вывел название (проверить дату) и размер архива.
ls -lah $BACKUP_FOLDER/01/

Теперь выставляем его в cron с нужной периодичностью и пусть работает. Стоит настроить, чтобы сообщение от выполнения операции приходили на почту, чтобы проверять результат. Как раз последняя строчка ls -lah $BACKUP_FOLDER/01/ и покажет дату создания архива, размер и т.д. Проще утром просмотреть пару таких отчетов, нежели лазить по каталогам и смотреть, все ли забэкапилось.

Восстановление

Тут все просто, достаточно разархивировать нужный вам архив командой tar -xvjf. Например:

   tar -xvjf имя.архива.tar.bz2

Копирование по датам

Задачка: в конце рабочего дня все накопленные файлы разговоров Asterisk отправлять по папкам с датами. То есть зашли в год, потом месяц, потом в день и нашли то, что нам нужно. Например, это можно сделать так:

#!/bin/bash
SOURCE="home/recording"
BKDIR="home/backup"
  
DAY=`date +%d`
MONTH=`date +%m`
YEAR=`date +%Y`

mkdir /$BKDIR/$YEAR/
mkdir /$BKDIR/$YEAR/$MONTH
mkdir /$BKDIR/$YEAR/$MONTH/$DAY
cp -v -r /$SOURCE/*.wav /$BKDIR/$YEAR/$MONTH/$DAY/
rm -rf /$SOURCE/*