Резервное копирование списка учетных записей и списков рассылки в Zimbra Collaboration 8.6

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

Итак мы имеем развернутый по этой статье почтовый сервер Zimbra Collaboration 8.6 на Ubuntu server 14.04. Для создания бекапа данных мы будем использовать bash скрипты.

 

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

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

nano backup_accounts.sh
sudo chmod +x backup_accounts.sh

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

#!/bin/bash

#####################
# Настройка скрипта #
#####################
# Место где хранить бекапы
Path="/home/jakonda/bkzm"
# Название домена
Domain="jakondo.ru"
# Текущая дата
Current_date=$(date +%d-%m-%Y)
# Временный файл для работы скрипта
Temp=$Path"/temp"
echo "################################################"
echo "# Резервное копирование списка учетных записей #"
echo "################################################"
echo ""
echo "Получение списка аккаунтов в домене $Domain..."
# Получаем список всех аккаунтов в указанном домене
/opt/zimbra/bin/zmprov -l gaa $Domain > $Temp
echo "Получение подробных сведений по аккаунтам..."
# Получаем развернутые данные по каждому аккаунту
for account in $( cat $Temp); do
# Фамилия
GN=$(/opt/zimbra/bin/zmprov ga $account | grep givenName)
# Имя
SN=$(/opt/zimbra/bin/zmprov ga $account | grep sn)
# Отчество
IN=$(/opt/zimbra/bin/zmprov ga $account | grep initials)
# Отображаемое полное имя
DN=$(/opt/zimbra/bin/zmprov ga $account | grep displayName)
# компануем полученные данные в одну строку и записываем ее в файл бекапа
echo "$account <$GN><$SN><$IN><$DN>" >> $Path"/$Current_date.accounts.txt"
done
echo "Создание бекапа списка аккаунтов завершено"
# Подчищаем после выполнения скрипта
rm -f $Temp

В ходе выполнения скрипта, сначала формируется список всех почтовых ящиков имеющихся в указанном домене, затем по каждому почтовому ящику создается бекап, в конце создается лог файл. Пример вывода работы скрипта:

################################################
# Резервное копирование списка учетных записей #
################################################
Получение списка аккаунтов в домене jakondo.ru...
Получение подробных сведений по аккаунтам...
Создание бекапа списка аккаунтов завершено

Полученный файл бекапа выглядит вот так:

jakonda1@jakondo.ru <><sn: Жаконда1><><displayName: Жаконда1>
jakonda2@jakondo.ru <><sn: Жаконда2><><displayName: Жаконда2>
jakonda@jakondo.ru <givenName: Иван><sn: Иванов><initials: Иванович><displayName: Иванов Иван Иванович>
jakond@jakondo.ru <givenName: Петя><sn: Петечкин><initials: Петин><displayName: Петечкин Петя Петин>

Вот таким способом мы получили бекап всем имеющихся учетных записей, которые всегда можно будет восстановить, что ниже мы и рассмотрим…

 

Восстановление учетных записей из резервной копии

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

nano restore_accounts.sh
sudo chmod +x restore_accounts.sh

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

#!/bin/bash

#####################
# Настройки скрипта #
#####################
# Путь к месту бекапа списка пользователей
Path="/home/jakonda/bkzm"
# Название домена
Domain="jakondo.ru"
echo "#################################################################"
echo "# Восстановление из резервной копии списка пользователей Zimbra #"
echo "#################################################################"
echo ""
# Запрос ввода имени почтового ящика
read -p "Введите за какое число восстановить аккаунты пользователей: " Date
echo "Время начала восстановления аккаунтов - $(date +%T)"
echo ""
# Запоминаем время начала восстановление
Begin_time=$(date +%s)
# Проходимся по каждому аккаунту в списке и восстанавливаем его
cat $Path"/"$Date".accounts.txt"| while read account; do
# Отделяем имя аккаунта почты
AC=$(echo $account | sed -r 's/ <.+//')
# Отделяем Имя
if Result=$(echo $account | grep 'givenName'); then
GN=$(echo $account | sed 's|.*<givenName: ||'|sed -r 's/>.+//')
else
GN=$(echo "")
fi
# Отделяем Фамилия
if Result=$(echo $account | grep 'sn'); then
SN=$(echo $account | sed 's|.*<sn: ||'|sed -r 's/>.+//')
else
SN=$(echo "")
fi
# Отделяем Отчество
if Result=$(echo $account | grep 'initials'); then
IN=$(echo $account | sed 's|.*<initials: ||'|sed -r 's/>.+//')
else
IN=$(echo "")
fi
# Отделяем Отображаемое имя
if Result=$(echo $account | grep 'displayName'); then
DN=$(echo $account | sed 's|.*<displayName: ||'|sed -r 's/>.*//')
else
DN=$(echo)
fi
# Создаем почтовый аккаунт
echo "Восстановление аккаунта $AC..."
Result=$(/opt/zimbra/bin/zmprov ca $AC Aa1234567 displayName "$DN" givenName "$GN" sn "$SN" initials "$IN")
if [ $? -eq 0 ]; then
echo -n "$(tput hpa $(tput cols))$(tput cub 6) [OK]"
echo
else
echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]"
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 секунд"

В ходе выполнения скрипта, из списка бекапа аккаунтов разбирается каждая строка и при создании аккаунтов восстанавливаются данные такие как ФИО и отображаемое имя, по-умолчанию задается пароль Aa1234567. Пример вывода работы скрипта:

#################################################################
# Восстановление из резервной копии списка пользователей Zimbra #
#################################################################
Введите за какое число восстановить аккаунты пользователей: 28-01-2017
Время начала восстановления аккаунтов - 21:43:19
Восстановление аккаунта jakonda1@jakondo.ru...[OK]
Восстановление аккаунта jakonda2@jakondo.ru...[OK]
Восстановление аккаунта jakonda@jakondo.ru...[OK]
Восстановление аккаунта jakond@jakondo.ru...[OK]
Затрачено времени на восстановление аккаунтов : 0 час 0 минут 56 секунд

Таким способом мы удобно восстанавливаем почтовые аккаунты. Теперь рассмотрим как создавать резервные копии списков пользователей и так же их восстанавливать.

 

Резервное копирование списков рассылки

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

nano backup_lists.sh
sudo chmod +x backup_lists.sh

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

#!/bin/bash

#####################
# Настройка скрипта #
#####################
# Место где хранить бекапы
Path="/home/jakonda/bkzm/lists"
# Название домена
Domain="jakondo.ru"
# Текущая дата
Current_date=$(date +%d-%m-%Y)
# Временный файл для работы скрипта
Temp=$Path"/temp"
echo "##########################################"
echo "# Резервное копирование списков рассылки #"
echo "##########################################"
echo ""
echo "Время начала бекапа списков рассылки - $(date +%T)"
# Запоминаем время начала бекапа
Begin_time=$(date +%s)
echo ""
# Создаем катаолг под бекап на текущую дату
mkdir -p $Path/$Current_date/
# Получаем списки рассылок в указанном домене
echo "Получение списка рассылки в домене $Domain..."
/opt/zimbra/bin/zmprov gadl > $Temp
# Получаем адресатов в рассылках
cat $Temp | while read accounts_list; do
echo "Получение адресатов в рассылке $accounts_list..."
/opt/zimbra/bin/zmprov gdl $accounts_list | grep zimbraMailForwardingAddress: | awk {'print $2'} > $Path/$Current_date/$accounts_list
if [ $? -eq 0 ]; then
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
echo
else
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]"
echo
fi
done
echo "Создание бекапа списков рассылки"
# Подчищаем после выполнения скрипта
rm -f $Temp
# Вычисление времени работы бекапа списков рассылки
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 секунд"

В ходе выполнения скрипта обрабатываются все имеющиеся списки рассылок и каждая из список рассылок резервируется с их адресатами. Пример вывода работы скрипта:

##########################################
# Резервное копирование списков рассылки #
##########################################
Время начала бекапа списков рассылки - 20:28:08
Получение списка рассылки в домене jakondo.ru...
Получение адресатов в рассылке test1@jakondo.ru... [OK]
Получение адресатов в рассылке test2@jakondo.ru... [OK]
Создание бекапа списков рассылки
Затрачено времени на резервное копирование : 0 час 0 минут 19 секунд

Быстро, легко и информативно мы зделали резервные копии списков рассылки. Теперь разберем как восстановить из резервной копии списки рассылок.

 

Восстановление списков рассылки из резервной копии

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

nano restore_lists.sh
sudo chmod +x restore_lists.sh

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

#!/bin/bash

#####################
# Настройки скрипта #
#####################
# Путь к месту бекапа списка пользователей
Path="/home/jakonda/bkzm/lists"
# Название домена
Domain="jakondo.ru"
# Временный файл для работы скрипта
Temp=$Path"/temp"
echo "######################################################"
echo "# Восстановление из резервной копии списков рассылки #"
echo "######################################################"
echo ""
# Запрос даты, за какое число нужно восстановить бекап
read -p "Введите дату за какое число восстановить из бекапа (прим. 01-01-1985): " Date
# Проверим наличия бекапов за указанную дату
if ! [ -d $Path/$Date ]; then
echo 'Нет бекапов на указанную дату... Завершаем работу скрипта.'
exit
fi
echo "Время начала восстановление списков рассылки - $(date +%T)"
# Запоминаем время начала восстановления
Begin_time=$(date +%s)
# Восстанавливаем списки рассылок из бекапа
for file in $Path/$Date/*; do
Name=$(ls $file | sed -e 's/^.*\///')
echo "Восстанавливаем список рассылки $Name"
Result=$(/opt/zimbra/bin/zmprov cdl $Name)
if [ $? -eq 0 ]; then
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
echo
echo "Восстановление участников рассылки $Name"
FullName=$(ls $file)
cat $FullName | while read account; do
Result=$(/opt/zimbra/bin/zmprov adlm $Name $account)
done
echo
else
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]"
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 секунд"

В ходе выполнения скрипта восстанавливается рассылка из резервной копии и включение в нее участников. Пример вывода работы скрипта:

######################################################
# Восстановление из резервной копии списков рассылки #
######################################################
Введите дату за какое число восстановить из бекапа (прим. 01-01-1985): 30-01-2017
Время начала восстановление списков рассылки - 22:56:19
Восстанавливаем список рассылки test1@jakondo.ru [OK]
Восстановление участников рассылки test1@jakondo.ru
Восстанавливаем список рассылки test2@jakondo.ru [OK]
Восстановление участников рассылки test2@jakondo.ru
Затрачено времени на восстановление списка рассылок: 0 час 0 минут 58 секунд

Вот таким способом мы удобно и информативно делаем резервные копии и восстанавливаем из них.

 

Понравилась или оказалась полезной статья, поблагодари автора

 

БесполезноСлабоватоПриемлемоОтличноПревосходно (3 голос(ов), в среднем: 5,00 из 5)
Загрузка...

Всего комментариев: 6 Комментировать

  1. hmuriy /

    Спасибо! Весьма полезные скрипты!
    Было бы неплохо в скрипт «Резервное копирование списка учетных записей» вставить какой нить «прогресс», а то не совсем понятно, работает скрипт или завис, когда много почтовых ящиков!

    1. Жаконда / Автор записи

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

  2. grinnZ /

    В скрипте Резервное копирование списка учетных записей
    в /opt/zimbra/bin/zmprov gdl $accounts_list | grep zimbraMailForwardingAddress: | awk {‘print $2’} > $Path/$Current_date/$accounts_l$ ошибка

    1. Жаконда / Автор записи

      Копировал листинг из терминала, немного строка обрезалась, должно быть так /opt/zimbra/bin/zmprov gdl $accounts_list | grep zimbraMailForwardingAddress: | awk {‘print $2’} > $Path/$Current_date/$accounts_list

      Исправил

  3. Юра /

    актуален ли скрипт для 8.7?

    1. Жаконда / Автор записи

      Не знаю, не пробовал для версии 8.7. В тестовых условиях попробуйте.

Оставить ответ Жаконда Отменить ответ

четыре × три =