Продукты Р7
Корпоративный сервер 2024
Корпоративный сервер 2024
Сервер документов
Сервер документов
Редакторы
Редакторы
Корпоративный сервер 2019
Корпоративный сервер 2019
Графика
Графика
Команда
Команда
Мобильные редакторы
Мобильные редакторы
Облачный офис
Облачный офис
Почта
Почта
Органайзер
Органайзер
Сервер лицензирования
Дополнительно
Часто задаваемые вопросы
Разработчикам
Интеграции
Новые возможности

Резервное копирование/восстановление Корпоративный сервер 2024 архитектура Middle

Обновлено: 05.03.26

Хранилище файлов NFS, без встроенного почтового сервера

Краткое описание

Скрипты основаны на инструкциях по установке Корпоративный сервер 2024 в архитектуре middle ↗

Для работы скриптов необходимо наличие установленного rsync на серверах участвующих в схеме КС и с которого запускается скрипт. На сервере, с которого запускается скрипт, необходимо установить lbzip2 (в скрипте есть проверка).

Скрипт копирует и архивирует информацию из папок:

Сервер с ролью Диск:

  • /etc/supervisor (в REDOS /etc/supervisor.d)
  • /opt/r7-office
  • /var/r7-office
  • /var/www/r7-office

Сервер с ролью Сервер документов:

  • /etc/r7-office
  • /var/www/r7-office

Сервер с ролью Поиск:

  • /opt/r7-office
  • /var/r7-office
  • /etc/supervisor (в REDOS /etc/supervisor.d)

Сервер с ролью NFS:

  • /mnt/nfs

Перед запуском необходимо вписать следующую информацию

  1. Если для доступа к серверам используется доступ по ключу, вписать путь;
  2. Если доступ без ключа, тогда нужно изменить команды доступа у rsync и ssh;
  3. Если для доступа по ssh используется нестандартный порт, так же нужно указать в командах;
  4. Нужно ввести адреса серверов согласно их ролям.

Описание переменных

ПеременнаяОписание
BACKUP_DIR=/backup/corpportalПапка для хранения архивов
BACKUP_DATE=$(date +’%Y-%m-%d’)Формат даты для имени архива
SSH_KEY_PATH=/backup/id_rsaПуть к SSH ключу
SSH_PORT=22SSH порт по которому осуществляется подключение к серверам
NUM_CORES=$(($(nproc)/2))Для работы архиватора по умолчанию берется половина ядер на сервере бэкапа
DS_IP=172.16.10.11Адрес сервера с ролью Сервер документов
KS_IP=172.16.10.12Адрес сервера с ролью Диск
SRCH_IP=172.16.10.13Адрес сервера с ролью Поиск
NFS_IP=172.16.10.14Адрес сервера с ролью NFS
BACKUP_FILEИмя файла с архивом для восстановления

Список переменных с адресами серверов вынесен в отдельный файл backup.conf:

#BACKUP_FILE="cddisk-2024-04-23.tar.bz2" #Только для восстановления данных из архива

BACKUP_DIR="backup/corpportal"

BACKUP_DATE=$(date +'%Y-%m-%d')

SSH_KEY_PATH="backup/id_rsa"

SSH_PORT=22

NUM_CORES=$(( ($(nproc) + 1) / 2 ))

DS_IP="172.16.10.11"

KS_IP="172.16.10.12"

SRCH_IP="172.16.10.13"

NFS_IP="172.16.10.14"

LOG_FILE="$BACKUP_DIR/backup_${BACKUP_DATE}.log" #Имя файла содержит дату

Пример скрипта для создания резервной копии

#!/bin/bash

# Путь до файла конфигурации
source backup.conf

# Вызов функции cleanup после выполнения прерывания
trap cleanup INT TERM
trap cleanup_exit EXIT

cleanup() {
log_info "Завершение скрипта после прерывания..."
exit 1
}

cleanup_exit() {
log_info "Завершение скрипта..."
# ВАЖНО: не завершаем с ошибкой при нормальном выходе
# (если нужно всегда 1 — верни как было)
return 0
}

# Функции логирования
log_info() {
echo "$(date +'%Y-%m-%d %H:%M:%S') INFO: $1" | tee -a "$LOG_FILE"
}

log_warn() {
echo "$(date +'%Y-%m-%d %H:%M:%S') WARN: $1" | tee -a "$LOG_FILE"
}

log_error() {
echo "$(date +'%Y-%m-%d %H:%M:%S') ERROR: $1" | tee -a "$LOG_FILE"
}

# Создаем backup каталог
mkdir -p "$BACKUP_DIR"

# Проверка, установлен ли lbzip2 и rsync
if ! command -v lbzip2 &> /dev/null; then
log_error "Ошибка: lbzip2 не установлен. Установите lbzip2 и повторите попытку."
exit 1
fi

if ! command -v rsync &> /dev/null; then
log_error "Ошибка: rsync не установлен. Установите rsync и повторите попытку."
exit 1
fi

# Если NUM_CORES не задан в backup.conf — используем nproc
if [ -z "${NUM_CORES:-}" ]; then
NUM_CORES=$(nproc)
fi

# Функция для получения пути до директории supervisor
get_supervisor_dir() {
local server=$1
local supervisor_dir=""

if ssh -i "$SSH_KEY_PATH" -p "$SSH_PORT" root@"$server" "test -d /etc/supervisord.d" 2>/dev/null; then
supervisor_dir="/etc/supervisord.d"
elif ssh -i "$SSH_KEY_PATH" -p "$SSH_PORT" root@"$server" "test -d /etc/supervisor" 2>/dev/null; then
supervisor_dir="/etc/supervisor"
else
log_error "Не найден каталог supervisor на сервере $server"
return 1
fi

echo "$supervisor_dir"
return 0
}

rsync_msg() {
local code_err=$1
local host_ip=$2

if [ "$code_err" -eq 23 ]; then
log_error "Ошибка: rsync не установлен или произошла другая фатальная ошибка на удаленном хосте $host_ip (code 23). Проверьте rsync/сеть."
exit 1
elif [ "$code_err" -ne 0 ]; then
log_error "Ошибка rsync (code $code_err) при копировании с $host_ip. Смотрите лог: $LOG_FILE"
exit 1
fi

log_info "Копирование с $host_ip завершено успешно."
}

get_databases() {
# Забираем конфиг с KS, чтобы получить HOST/USER/PASS/PORT (и основное имя БД)
scp -i "$SSH_KEY_PATH" -P "$SSH_PORT" root@"$KS_IP":/opt/r7-office/Api/appsettings.json .
if [ $? -eq 0 ]; then
log_info "Файл конфигурации удалось скопировать"
else
log_error "Файл конфигурации не удалось скопировать"
exit 1
fi

local DB_PATH_PARAM=./appsettings.json

PSQL_HOST=$(grep -oP "Host=[^\";]*" "$DB_PATH_PARAM" | head -1 | cut -d'=' -f2)
PSQL_DB_NAME=$(grep -oP "Database=[^\";]*" "$DB_PATH_PARAM" | head -1 | cut -d'=' -f2)
PSQL_USER=$(grep -oP "Username=[^\";]*" "$DB_PATH_PARAM" | head -1 | cut -d'=' -f2)
PSQL_PASS=$(grep -oP "Password=[^\";]*" "$DB_PATH_PARAM" | head -1 | cut -d'=' -f2)
PSQL_PORT=$(grep -oP "Port=[^\";]*" "$DB_PATH_PARAM" | head -1 | cut -d'=' -f2)

export PGPASSWORD="$PSQL_PASS"

log_info "DB_HOST=$PSQL_HOST DB_PORT=$PSQL_PORT DB_USER=$PSQL_USER DB_NAME=$PSQL_DB_NAME"

rm -f "$DB_PATH_PARAM"

# Дата для имени дампов/архива (без пробелов/двоеточий)
BACKUP_DATE=$(date +'%Y-%m-%d_%H-%M-%S')

# Очистка от старых дампов
rm -f "$BACKUP_DIR"/cddisk_db_*.dump "$BACKUP_DIR"/pagesdb_db_*.dump

dump_db() {
local dbname="$1"
local prefix="$2"
local out_file="$BACKUP_DIR/${prefix}_${BACKUP_DATE}.dump"

log_info "Создание дампа БД $dbname -> $out_file"
pg_dump -v -h "$PSQL_HOST" -p "$PSQL_PORT" -U "$PSQL_USER" -d "$dbname" -F c -c -f "$out_file"
if [ $? -eq 0 ]; then
log_info "Дамп $dbname успешно создан"
else
log_error "Дамп $dbname создан с ошибкой"
exit 1
fi

echo "$out_file"
}

# 1) Дамп БД из конфига (обычно cddisk)
cddisk_dump_file=$(dump_db "$PSQL_DB_NAME" "cddisk_db")

# 2) Дамп pagesdb (тот же сервер/учётка)
pagesdb_dump_file=$(dump_db "pagesdb" "pagesdb_db")
}

# Время начала создания бэкапа
START_BACKUP_TIME=$(date +'%Y-%m-%d %H:%M:%S')
log_info "Начало резервного копирования: $START_BACKUP_TIME"

# Получить каталоги supervisor
KS_SUPERVISOR_DIR=$(get_supervisor_dir "$KS_IP") || exit 1
SRCH_SUPERVISOR_DIR=$(get_supervisor_dir "$SRCH_IP") || exit 1

# Подготовка каталогов
mkdir -p "$BACKUP_DIR/ds/etc/r7-office"
mkdir -p "$BACKUP_DIR/ds/var/www/r7-office"
mkdir -p "$BACKUP_DIR/ks/$KS_SUPERVISOR_DIR"
mkdir -p "$BACKUP_DIR/ks/opt/r7-office"
mkdir -p "$BACKUP_DIR/ks/var/r7-office"
mkdir -p "$BACKUP_DIR/ks/var/www/r7-office"
mkdir -p "$BACKUP_DIR/srch/opt/r7-office"
mkdir -p "$BACKUP_DIR/srch/$SRCH_SUPERVISOR_DIR"
mkdir -p "$BACKUP_DIR/srch/var/r7-office"
mkdir -p "$BACKUP_DIR/nfs/mnt/"

# Получить дампы баз
get_databases

# RSYNC копирование данных с удаленных серверов
log_info "Начало копирования с сервера $DS_IP из каталога /etc/r7-office"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" root@"$DS_IP":/etc/r7-office "$BACKUP_DIR/ds/etc/r7-office/"
rsync_msg $? "$DS_IP"

log_info "Начало копирования с сервера $DS_IP из каталога /var/www/r7-office"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" root@"$DS_IP":/var/www/r7-office "$BACKUP_DIR/ds/var/www/r7-office/"
rsync_msg $? "$DS_IP"

log_info "Начало копирования с сервера $KS_IP из каталога $KS_SUPERVISOR_DIR"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" root@"$KS_IP":"$KS_SUPERVISOR_DIR" "$BACKUP_DIR/ks/$KS_SUPERVISOR_DIR/"
rsync_msg $? "$KS_IP"

log_info "Начало копирования с сервера $KS_IP из каталога /opt/r7-office"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" root@"$KS_IP":/opt/r7-office "$BACKUP_DIR/ks/opt/r7-office/"
rsync_msg $? "$KS_IP"

log_info "Начало копирования с сервера $KS_IP из каталога /var/r7-office"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" root@"$KS_IP":/var/r7-office "$BACKUP_DIR/ks/var/r7-office/"
rsync_msg $? "$KS_IP"

log_info "Начало копирования с сервера $KS_IP из каталога /var/www/r7-office"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" root@"$KS_IP":/var/www/r7-office "$BACKUP_DIR/ks/var/www/r7-office/"
rsync_msg $? "$KS_IP"

log_info "Начало копирования с сервера $SRCH_IP из каталога /opt/r7-office"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" root@"$SRCH_IP":/opt/r7-office "$BACKUP_DIR/srch/opt/r7-office/"
rsync_msg $? "$SRCH_IP"

log_info "Начало копирования с сервера $SRCH_IP из каталога $SRCH_SUPERVISOR_DIR"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" root@"$SRCH_IP":"$SRCH_SUPERVISOR_DIR" "$BACKUP_DIR/srch/$SRCH_SUPERVISOR_DIR/"
rsync_msg $? "$SRCH_IP"

log_info "Начало копирования с сервера $SRCH_IP из каталога /var/r7-office"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" root@"$SRCH_IP":/var/r7-office "$BACKUP_DIR/srch/var/r7-office/"
rsync_msg $? "$SRCH_IP"

log_info "Начало копирования с сервера $NFS_IP из каталога /mnt/nfs"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" root@"$NFS_IP":/mnt/ "$BACKUP_DIR/nfs/mnt/"
rsync_msg $? "$NFS_IP"

# Создание архива с бэкапом (BACKUP_DATE задан в get_databases)
log_info "Формируется архив..."
tar cvf "$BACKUP_DIR/cddisk-${BACKUP_DATE}.tar.bz2" \
--selinux \
--use-compress-prog="lbzip2 -k -n$NUM_CORES" \
"$BACKUP_DIR/ds/etc/r7-office" \
"$BACKUP_DIR/ds/var/www/r7-office" \
"$BACKUP_DIR/ks/$KS_SUPERVISOR_DIR" \
"$BACKUP_DIR/ks/opt/r7-office" \
"$BACKUP_DIR/ks/var/r7-office" \
"$BACKUP_DIR/ks/var/www/r7-office" \
"$BACKUP_DIR/srch/opt/r7-office" \
"$BACKUP_DIR/srch/$SRCH_SUPERVISOR_DIR" \
"$BACKUP_DIR/srch/var/r7-office" \
"$BACKUP_DIR/nfs/mnt/nfs" \
"$cddisk_dump_file" \
"$pagesdb_dump_file"

if [ $? -eq 0 ]; then
log_info "Архив успешно создан"
else
log_error "Архив создан с ошибкой"
exit 1
fi

# Время завершения бэкапирования
END_BACKUP_TIME=$(date +'%Y-%m-%d %H:%M:%S')
log_info "Завершение резервного копирования: $END_BACKUP_TIME"

# Время в секундах работы бэкапирования
START_TIMESTAMP=$(date -d "$START_BACKUP_TIME" +%s)
END_TIMESTAMP=$(date -d "$END_BACKUP_TIME" +%s)
TOTAL_DURATION=$((END_TIMESTAMP - START_TIMESTAMP))
log_info "Общее время выполнения: $TOTAL_DURATION секунд"

log_info "Резервное копирование завершено: $(date +'%Y-%m-%d %H:%M:%S')"

Восстановление из архива

Обратите внимание, если при восстановлении изменились адреса серверов внутри архитектуры, возможны ошибки в работе Корпоративного сервера. Нужно будет проверить все настройки, связанные с этими серверами согласно инструкции по установке.

Пример скрипта восстановления

#!/bin/bash

# Путь до файла конфигурации
source restore.conf

# Функция для обработки прерываний
trap cleanup INT TERM
trap cleanup_exit EXIT

# ---- ЛОГИРОВАНИЕ (исправлено: без экранирования $1) ----
log_info() { echo "$(date +'%Y-%m-%d %H:%M:%S') INFO: $1" | tee -a "$LOG_FILE"; }
log_warn() { echo "$(date +'%Y-%m-%d %H:%M:%S') WARN: $1" | tee -a "$LOG_FILE"; }
log_error() { echo "$(date +'%Y-%m-%d %H:%M:%S') ERROR: $1" | tee -a "$LOG_FILE"; }

# Функция очистки при прерывании
cleanup() {
log_warn "Скрипт восстановления прерван. Выполняется очистка..."
exit 1
}

# Функция очистки при выходе
cleanup_exit() {
log_info "Скрипт восстановления завершает работу."
return 0
}

# ---- ПРОВЕРКИ КОМАНД ----
for cmd in lbzip2 rsync psql pg_restore ssh scp; do
if ! command -v "$cmd" &> /dev/null; then
log_error "Ошибка: $cmd не установлен. Установите $cmd и повторите попытку."
exit 1
fi
done

# ---- ФУНКЦИИ ----

# Функция для получения пути до директории supervisor
get_supervisor_dir() {
local server="$1"
local supervisor_dir=""

if ssh -i "$SSH_KEY_PATH" -p "$SSH_PORT" root@"$server" "test -d /etc/supervisord.d" 2>/dev/null; then
supervisor_dir="/etc/supervisord.d"
elif ssh -i "$SSH_KEY_PATH" -p "$SSH_PORT" root@"$server" "test -d /etc/supervisor" 2>/dev/null; then
supervisor_dir="/etc/supervisor"
else
log_error "Не найден каталог supervisor на сервере $server"
return 1
fi

echo "$supervisor_dir"
return 0
}

# Обработка результата rsync
rsync_msg() {
local code_err="$1"
local host_ip="$2"

if [ "$code_err" -eq 23 ]; then
log_error "Ошибка rsync (code 23) на удаленном хосте $host_ip. Проверьте rsync/сеть."
exit 1
elif [ "$code_err" -ne 0 ]; then
log_error "Ошибка rsync (code $code_err) при копировании с/на $host_ip. Смотрите лог: $LOG_FILE"
exit 1
fi

log_info "Rsync для $host_ip завершён успешно."
}

# Создать базу заново
recreate_db() {
local dbname="$1"

# подключаемся к postgres
local PSQL_ADMIN="psql -h $PSQL_HOST -p $PSQL_PORT -U $PSQL_USER -d postgres"
$PSQL_ADMIN -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='${dbname}' AND pid <> pg_backend_pid();"
log_info "Пересоздание базы данных $dbname (DROP/CREATE)..."
$PSQL_ADMIN -v ON_ERROR_STOP=1 -c "DROP DATABASE IF EXISTS $dbname;"
$PSQL_ADMIN -v ON_ERROR_STOP=1 -c "CREATE DATABASE $dbname OWNER $PSQL_USER;"
}

# Восстановить базы из дампа
restore_db_from_dump() {
local dbname="$1"
local dump_file="$2"

if [ ! -f "$dump_file" ]; then
log_error "Файл дампа не найден: $dump_file"
exit 1
fi

log_info "Восстановление БД $dbname из $dump_file"
pg_restore -h "$PSQL_HOST" -p "$PSQL_PORT" -U "$PSQL_USER" -d "$dbname" -v -F c "$dump_file"
if [ $? -eq 0 ]; then
log_info "База данных $dbname успешно восстановлена."
else
log_error "Не удалось восстановить базу данных $dbname."
exit 1
fi
}

# Функция для восстановления баз данных (cddisk + pagesdb)
restore_databases() {
local APPSETTINGS_PATH="$BACKUP_DIR/ks/opt/r7-office/appsettings.json"
if [ ! -f "$APPSETTINGS_PATH" ]; then
log_error "Не найден $APPSETTINGS_PATH. Проверьте, что архив распакован в $BACKUP_DIR и структура верная."
exit 1
fi

# Извлекаем параметры для подключения к PostgreSQL
DB_PATH_PARAM="$APPSETTINGS_PATH"
PSQL_HOST=$(grep -oP "Host=[^\";]*" "$DB_PATH_PARAM" | head -1 | cut -d'=' -f2)
PSQL_DB_NAME=$(grep -oP "Database=[^\";]*" "$DB_PATH_PARAM" | head -1 | cut -d'=' -f2) # обычно cddisk
PSQL_USER=$(grep -oP "Username=[^\";]*" "$DB_PATH_PARAM" | head -1 | cut -d'=' -f2)
PSQL_PASS=$(grep -oP "Password=[^\";]*" "$DB_PATH_PARAM" | head -1 | cut -d'=' -f2)
PSQL_PORT=$(grep -oP "Port=[^\";]*" "$DB_PATH_PARAM" | head -1 | cut -d'=' -f2)

export PGPASSWORD="$PSQL_PASS"

log_info "Параметры БД: host=$PSQL_HOST port=$PSQL_PORT user=$PSQL_USER main_db=$PSQL_DB_NAME"

local cddisk_dump=""
local pagesdb_dump=""

if [ -n "${BACKUP_DATE:-}" ]; then
for ext in dump tar.gz; do
[ -f "$BACKUP_DIR/cddisk_db_${BACKUP_DATE}.${ext}" ] && cddisk_dump="$BACKUP_DIR/cddisk_db_${BACKUP_DATE}.${ext}"
[ -f "$BACKUP_DIR/pagesdb_db_${BACKUP_DATE}.${ext}" ] && pagesdb_dump="$BACKUP_DIR/pagesdb_db_${BACKUP_DATE}.${ext}"
done
fi

# если не нашли по BACKUP_DATE — попробуем найти последние файлы
if [ -z "$cddisk_dump" ]; then
cddisk_dump=$(ls -1t "$BACKUP_DIR"/cddisk_db_* 2>/dev/null | head -1 || true)
fi
if [ -z "$pagesdb_dump" ]; then
pagesdb_dump=$(ls -1t "$BACKUP_DIR"/pagesdb_db_* 2>/dev/null | head -1 || true)
fi

if [ -z "$cddisk_dump" ]; then
log_error "Не найден дамп cddisk_db_* в $BACKUP_DIR"
exit 1
fi
if [ -z "$pagesdb_dump" ]; then
log_error "Не найден дамп pagesdb_db_* в $BACKUP_DIR"
exit 1
fi

# Восстановление cddisk
recreate_db "$PSQL_DB_NAME"
restore_db_from_dump "$PSQL_DB_NAME" "$cddisk_dump"

# Восстановление pagesdb
recreate_db "pagesdb"
restore_db_from_dump "pagesdb" "$pagesdb_dump"
}

# ---- ОСНОВНОЙ ПРОЦЕСС ----

START_RESTORE_TIME=$(date +'%Y-%m-%d %H:%M:%S')
log_info "Начало процесса восстановления: $START_RESTORE_TIME"

# Распаковка архива (если в restore.conf задан ARCHIVE_PATH)
if [ -n "${ARCHIVE_PATH:-}" ]; then
if [ ! -f "$ARCHIVE_PATH" ]; then
log_error "Архив не найден: $ARCHIVE_PATH"
exit 1
fi
log_info "Распаковка архива $ARCHIVE_PATH в $BACKUP_DIR"
mkdir -p "$BACKUP_DIR"
tar xf "$ARCHIVE_PATH" --selinux -C "$BACKUP_DIR" --use-compress-prog="lbzip2 -k -n$(nproc)"
fi

# Восстановление баз данных (cddisk + pagesdb)
restore_databases

# Восстановление данных с помощью rsync
log_info "Начало восстановления данных с резервной копии на серверы."

# Восстановление данных на сервер DS
log_info "Восстановление /etc/r7-office на $DS_IP"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" \
"$BACKUP_DIR/ds/etc/r7-office/" root@"$DS_IP":/etc/r7-office/
rsync_msg $? "$DS_IP"

log_info "Восстановление /var/www/r7-office на $DS_IP"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" \
"$BACKUP_DIR/ds/var/www/r7-office/" root@"$DS_IP":/var/www/r7-office/
rsync_msg $? "$DS_IP"

# Восстановление данных на сервер KS
log_info "Восстановление директории supervisor на $KS_IP"
KS_SUPERVISOR_DIR=$(get_supervisor_dir "$KS_IP") || exit 1
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" \
"$BACKUP_DIR/ks/$KS_SUPERVISOR_DIR/" root@"$KS_IP":"$KS_SUPERVISOR_DIR"/
rsync_msg $? "$KS_IP"

log_info "Восстановление /opt/r7-office на $KS_IP"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" \
"$BACKUP_DIR/ks/opt/r7-office/" root@"$KS_IP":/opt/r7-office/
rsync_msg $? "$KS_IP"

log_info "Восстановление /var/r7-office на $KS_IP"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" \
"$BACKUP_DIR/ks/var/r7-office/" root@"$KS_IP":/var/r7-office/
rsync_msg $? "$KS_IP"

log_info "Восстановление /var/www/r7-office на $KS_IP"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" \
"$BACKUP_DIR/ks/var/www/r7-office/" root@"$KS_IP":/var/www/r7-office/
rsync_msg $? "$KS_IP"

# Восстановление данных на сервер SRCH
log_info "Восстановление директории supervisor на $SRCH_IP"
SRCH_SUPERVISOR_DIR=$(get_supervisor_dir "$SRCH_IP") || exit 1
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" \
"$BACKUP_DIR/srch/$SRCH_SUPERVISOR_DIR/" root@"$SRCH_IP":"$SRCH_SUPERVISOR_DIR"/
rsync_msg $? "$SRCH_IP"

log_info "Восстановление /opt/r7-office на $SRCH_IP"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" \
"$BACKUP_DIR/srch/opt/r7-office/" root@"$SRCH_IP":/opt/r7-office/
rsync_msg $? "$SRCH_IP"

log_info "Восстановление /var/r7-office на $SRCH_IP"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" \
"$BACKUP_DIR/srch/var/r7-office/" root@"$SRCH_IP":/var/r7-office/
rsync_msg $? "$SRCH_IP"

# Восстановление данных NFS
log_info "Восстановление данных NFS на $NFS_IP"
rsync -avz --partial -e "ssh -i $SSH_KEY_PATH -p $SSH_PORT" --log-file="$LOG_FILE" \
"$BACKUP_DIR/nfs/mnt/" root@"$NFS_IP":/mnt/
rsync_msg $? "$NFS_IP"

END_RESTORE_TIME=$(date +'%Y-%m-%d %H:%M:%S')
log_info "Процесс восстановления завершен: $END_RESTORE_TIME"

START_TIMESTAMP=$(date -d "$START_RESTORE_TIME" +%s)
END_TIMESTAMP=$(date -d "$END_RESTORE_TIME" +%s)
TOTAL_DURATION=$((END_TIMESTAMP - START_TIMESTAMP))
log_info "Общее время выполнения: $TOTAL_DURATION секунд"

 

Была ли эта статья полезной?

Поделитесь пожалуйста своим мнением

      В статье есть ошибкиРекомендации не помоглиТекст трудно понятьСодержание статьи не соответствует заголовкуДругое