Бэкап jabber-сервера Openfire

Введение

Цель - регулярное сохранение настроек и базы пользователей Openfire на всякий непредвиденный случай.

Настройки Openfire хранятся в каталоге /usr/share/openfire:

    • ~conf --> /etc/openfire
    • ~embedded-db --> /var/lib/openfire/embedded-db
    • /lib
    • ~logs --> /var/log/openfire
    • ~plugins --> /var/lib/openfire/plugins
    • /resources

Где ~conf --> /etc/openfire - симлинк, указывающий на реальное расположение файлов.

Бэкап настроек на локальный диск

Для бэкапа настроек и базы пользователей Openfire служит следующий скрипт /home/user/scripts/openfire_bkup.sh:

#!/bin/bash echo ============================== >> /home/user/scripts/openfire_bkup.log echo Backup of Openfire server start at: >> /home/user/scripts/openfire_bkup.log date >> /home/user/scripts/openfire_bkup.log /etc/init.d/openfire stop cp -LR /usr/share/openfire/* /home/user/1 cd /home/user/1 zip -r /home/user/openfire_bkup/openfire_bkup-`date +%Y%m%d`.zip ./* /etc/init.d/openfire start rm -r /home/user/1/* echo Backup of Openfire server stop at: >> /home/user/scripts/openfire_bkup.log date >> /home/user/scripts/openfire_bkup.log

Скрипт запускается ежедневно в 21:00 через crontab-файл пользователя root (у обычного пользователя нет прав на остановку/запуск демона openfire):

# m h dom mon dow command 0 21 * * * /home/user/scripts/openfire_bkup.sh

Crontab редактируется командой:

sudo crontab -e

Копирование ежедневного бэкапа на другой компьютер

На моём компьютере (допустим, IP 192.168.0.3) запущен простой FTP-сервер TYPSoft FTP Server, т.к. файлы бэкапа передаются по ftp-протоколу (так проще). Для копирования файлов бэкапа в нём создан пользователь "openfire" с паролем "%password%", корневой каталог "D:\arhiv\openfire_bkup\".

Для копирования бэкапа служит следующий скрипт /home/user/scripts/openfire_copy.sh:

#!/bin/bash /usr/bin/ftp -i -n <<EOF open 192.168.0.3 user openfire %password% cd /home/user/openfire_bkup bin put /home/user/openfire_bkup/openfire_bkup-`date +%Y%m%d`.zip openfire_bkup-`date +%Y%m%d`.zip quit EOF

Скрипт запускается ежедневно в 21:20 через crontab-файл пользователя oleg:

# m h dom mon dow command 20 21 * * * /home/user/scripts/openfire_copy.sh

Crontab редактируется командой:

crontab -e

Ротация файлов бэкапа

Для ротации файлов бэкапа служит следующий скрипт /home/user/scripts/openfire_mv_old.sh:

#!/bin/bash src=/home/user/openfire_bkup dest=/home/user/openfire_bkup/old rm $dest/*.zip mv $src/*.zip $dest/

Скрипт запускается еженедельно, по пятницам в 22:00 через crontab пользователя user:

# m h dom mon dow command 0 22 * * 5 /home/user/scripts/openfire_mv_old.sh

Поскольку файлы бэкапа дополнительно копируются ещё и на мой компьютер, то тоже пришлось настроить ротацию, во избежание переполнения диска. Для ротации файлов на моём компьютере, под управлением Windows, служит командный файл "D:\home\user\Programs\cmd\openfire_bkup_rotation.cmd" (запускается планировщиком Windows по пятницам, в 22:30):

@echo off REM ************************************************** REM По расписанию перемещаем файлы из каталога source REM в каталог dest. REM Поскольку каталог dest каждый раз очищается, REM то накопления файлов не происходит. REM Такая простенькая ротация файлов. REM ************************************************** REM Установка переменных setlocal set source=D:\arhiv\openfire_bkup set dest=D:\arhiv\openfire_bkup\old set now=%DATE:~-4%%DATE:~3,2%%DATE:~0,2% REM Проверка существования архива за текущий день if exist %source%\openfire_bkup-%now%.zip ( REM Если архив существует, считаем, что всё в порядке: REM Очистка каталога со старыми файлами и перемещение в него новых del /Q %dest%\*.* move %source%\*.* %dest% echo Backup files moved >> %dest%\rotation.log date /t >> %dest%\rotation.log time /t >> %dest%\rotation.log ) else ( REM Если архива нет, то в панике шлём письмо об ошибке echo Error! >> %dest%\rotation.log call D:\home\user\Programs\cmd\senderr1.cmd ) :END

В случае ошибки вызывается файл "D:\home\user\Programs\cmd\senderr1.cmd", который отправляет по электронной почте сообщение об ошибке:

@echo off setlocal set smtpsender=username@yandex.ru set smtpserver=smtp.yandex.ru set smtpport=25 set smtpuser=username@yandex.ru set smtppwd=password set subj="Openfire backup error!" set msg="Openfire backup files not finded! Check in D:\arhiv\openfire_bkup and on your Openfire server." set mailto=username2@yandex.ru set logfile=D:\home\user\Programs\blat307\log\blat_log.txt D:\home\user\Programs\blat307\full\blat.exe -to %mailto% -f %smtpsender% -server %smtpserver% -port %smtpport% -u %smtpuser% -pw %smtppwd% -log %logfile% -subject %subj% -body %msg% :END

Для отправки электронной почты используется консольный SMTP-клиент Blat (А здесь источник вдохновения для cmd-файла).