SCROLL

Посты с тэгом: bash script

Разберем как делать резервные копии имеющихся Subversion (SVN) репозиториев в Linux среде. Все ниже описанное производилось на Debian 8 Jessie.

 

Резервное копирование репозитория

Создаем резервную копию указанного репозитория:

sudo svnadmin dump /path/to/repository > svnexport.dump

 

Создаем резервную копию указанного репозитория и сжимаем его:

sudo svnadmin dump /path/to/repository | gzip > svnexport.dump.gz

 

Резервное копирование все репозиториев (bash скриптом)

Для того чтобы автоматизировать процесс резервирования всех имеющихся репозиториев, создадим скрипт, который будет выполнять эту задачу. Скрипт с коментариями, разобратся в нем не составит труда:

#!/bin/bash
# 06/01/2018 Jakonda (http://jakondo.ru)

# Резервное копирование репозиториев (SVN)

PATH_REPO="/var/svn/"
LOCAL_DIR="/srv/backups/svn"

EXPIRATION_DAYS=28
DATE=$(date +"%y_%m_%d")

# Создаем каталог для размещения бекапов, если он не создан
if ! [ -d $LOCAL_DIR ]; then
mkdir $LOCAL_DIR
fi

# Создаем каталог с текущей датой
mkdir -p $LOCAL_DIR/$DATE

# Создание дампа всех репозиториев
cd $PATH_REPO
for REPO in *; do
 test -d "$REPO" && /usr/bin/svnadmin dump $REPO | gzip > $LOCAL_DIR/$DATE/$REPO.dump.gz
done

# Удаление старых резервных копий
find $LOCAL_DIR* -mtime +${EXPIRATION_DAYS} -exec rm {} \;
# Удаление пустых каталогов
find $LOCAL_DIR* -type d -empty -exec rmdir {} \;

 

В этой статье мы разбирали как развернуть Zimbra Collaboration 8.6 на Ubuntu 14.04 Trusty Tahr. В бесплатной версии почтового сервера нет удобного функционала по бекапу и восстановлению почтовых ящиков. А создание бекапов, есть неотъемлемая часть работы любого системного администратора. Да и наличие бекапа всегда нас спасет в трудную минуту.

 

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

 

 

Резервное копирование всех почтовых ящиков

Создаем текстовый файл и делаем его исполняемым:

nano backup_all_mailbox.sh
sudo chmod +x backup_all_mailbox.sh

 

В созданный скрипт вписываем следующее (в параметрах настроек скрипта указываем данные свои):

#!/bin/bash

#####################
# Настройки скрипта #
#####################
# Путь к месту бекапа
Path_backup="/home/jakonda/bkzm"
# Временный файл для работы
Source_list="/home/jakonda/temp"
# Название домена
Domain="jakondo.ru"
# Значение текущей даты
Current_date=$(date +%d-%m-%Y)
# Лог-файл
Log=$Path_backup"/"$Current_date"/log"
echo "#####################################################"
echo "# Резервное копирование всех почтовых ящиков Zimbra #"
echo "#####################################################"
echo ""
echo "Время начала бекапа всех почтовых ящиков - $(date +%T)"
echo "Начало бекапа - $(date +%T)" > $Log
# Запоминаем время начала бекапа
Begin_time=$(date +%s)
echo ""
# Определяем список всех имеющихся почтовых ящиков
echo "Формируем список всех почтовых ящиков для бекапа..."
/opt/zimbra/bin/zmprov -l gaa $Domain > $Source_list
if [ $? -eq 0 ]; then
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
echo "Формирование списка почтовых ящиков успешно выполнено." >> $Log
echo
else
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]"
echo "Формирование списка почтовых ящиков не удалось выполнить. Завершение работы (Неудача)." >> $Log
exit
echo
fi
# Проходимся по всем ящикам в полученном списке и делаем бекап каждого
echo "Выполняем резервное копирование всех почтовых ящиков"
echo "----------------------------------------------------"
mkdir -p $Path_backup/$Current_date/
echo "Создание каталога $Current_date для размешения бекапа." >> $Log
for mailbox in $( cat $Source_list); do
echo "Резервирование почтового ящика - $mailbox"
/opt/zimbra/bin/zmmailbox -z -m $mailbox getRestUrl "//?fmt=tgz" > $Path_backup/$Current_date/$mailbox.tgz
if [ $? -eq 0 ]; then
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
echo "Бекап почтового ящика $mailbox успешен" >> $Log
echo
else
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]"
echo "Бекап почтового ящика $mailbox не удачно" >> $Log
echo
fi
done
# Вычисление времени работы бекапа почтовых ящиков
End_time=$(date +%s)
Elapsed_time=$(expr $End_time - $Begin_time)
Hours=$(($Elapsed_time / 3600))
Elapsed_time=$(($Elapsed_time - $Hours * 3600))
Minutes=$(($Elapsed_time / 60))
Seconds=$(($Elapsed_time - $Minutes * 60))
echo "Затрачено времени на резервное копирование : $Hours час $Minutes минут $Seconds секунд"
echo "Затрачено времени на резервное копирование : $Hours час $Minutes минут $Seconds секунд" >> $Log