SCROLL

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

Небольшой скрипт на bash для определения названия агентов подключенных к Asterisk. По работе было необходимо, но решил оставить это здесь, вдруг кому тоже пригодится.

Разберем как делать резервные копии базы данных Redmine, а так же прикрепленных файлов. Реализовывать резервное копирование будем с помощью bash-скрипта.

Разберем как делать резервные копии имеющихся 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 {} \;

 

Недавно появилась необходимость в написании bash скрипта, по автоматизации процесса создания резервной копии CRM vTiger системы.  CRM система развернута на CentOS 5.10 (Final) и соответственно скрипт будет писаться на этой же системе.  Написанный скрипт я для удобства расписал комментариями, поэтому если что по прошествии времени разобраться в нем не составит труда.

 

Задачи скрипта:

  1. Делать резервную копию базы данных mysql. По-умолчанию база данных называется vtigercrm521.
  2. Делать резервную копию каталога html CRM системы.
  3. Размещение резервной копии в указанном хранилище.
  4. Логирование работы скрипта.

 

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

 

Скрипт предусматривает два варианта на выбор, в каком месте размещать резервную копию.

  • Локальное хранилище — размещать резервную копию на той же машине, где и развернута CRM система.
  • Сетевое хранилище — размещение резервной копии на сетевом ресурсе.

 

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

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

 

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

 

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

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

nano backup_accounts.sh
sudo chmod +x backup_accounts.sh

 

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

В этой статье мы разбирали как развернуть 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

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

Для управления почтой Яндекс предоставляет API Почты для домена (подробней про API можно почитать в официальной документации), вот им мы как раз и воспользуемся для реализации нашей задачи.