Бэкап 1с-баз в *.dt на виндовую шару bash-скриптом


Доброго времени суток, коллеги. Сегодня пишу заметку по резервному копированию баз 1с, методом выгрузки с сервера 1с-предприятия bash-скриптом в родной для 1с формат DT.

Я ни в коем случае не претендую на звание ГУРУ. То, что я здесь излагаю является не более, чем записной книжкой и пособием по настройке оборудования. Если это послужит кому-нибудь подспорьем, то добро пожаловать

Итак, начинаем

Имеем настроенный по этой статье сервер 1с-предприятия.
В терминале ставим cifs-utils:

sudo apt install cifs-utils

Для выгрузки баз нам не нужно запускать 1с-клиента, что позволяет нам делать бэкап даже при отсутствии клиентских лицензий.
Также отсутствует необходимость получения монопольного доступа к базе данных, т.к. работаем напрямую с сервером PosgreSQL, хотя и инструментом от .
Проверено на 1с версии 8.3.14 и выше.

Создаем файлик backupdts.sh следующего содержания:

touch backupdts.sh && vi backupdts.sh

#!/bin/bash
# Путь к виндовой шаре
SHAREPATH="//1c-terminal/1c"
#Дополнительный путь внутри шары если присутствует, или "" при отсутствии (обращаем внимание на слэш в конце пути)
ADDSHAREPATH="backups/"
# Точка монтирования
LOCAL_MOUNT_PATH="/mnt/BackUps"
# Домен шары
DOMAIN="1c-terminal"
# Пользователь шары
USER="Пользователь, для которого расшарена папка"
# Пароль шары
PASSWORD="Сложный пароль на расшаренный ресурс"
# Логин пользователя СУБД.
POSTGRES_ADMIN="postgres"
# Пароль пользователя СУБД
POSTGRES_ADMIN_PASSWORD="Сложный пароль пользователя postgres"
# DNS имя сервера PostgreSQL или IP-адрес оного
POSTGRES_SERVER_NAME="1c-sql"
# Получаем текущую дату
NOW=$(date +"-"%d"."%m"."%Y"-"%H"."%M"."%S)
# Задаем количество дней ротации резервных копий БД
ROTATE=7
# Через пробел в кавычках заполняем массив значениями БД на сервере
allBases=("zup" "pred" "torg")
# Монтируем Windows-шару (при отсутствии домена не указываем параметр dom=$DOMAIN)
sudo mount -t cifs $SHAREPATH $LOCAL_MOUNT_PATH -o dom=$DOMAIN,user=$USER,pass=$PASSWORD,iocharset=utf8,file_mode=0777,dir_mode=0777
# для каждого значения массива
for t in ${allBases[@]};
do
# выгружаем БД
/opt/1C/v8.3/x86_64/ibcmd infobase dump --dbms=PostgreSQL --db-server=$POSTGRES_SERVER_NAME --db-user=$POSTGRES_ADMIN --db-pwd=$POSTGRES_ADMIN_PASSWORD --db-name=$t $t$NOW.dt
# Создаем папку с именем БД в случае ее отсутствия, в ней будут лежать бэкапы базы по датам
if [ ! -d "$LOCAL_MOUNT_PATH/$ADDSHAREPATH$t" ]; then
mkdir -p $LOCAL_MOUNT_PATH/$ADDSHAREPATH$t
fi
# переносим в папку с бэкапами
mv $t$NOW.dt $LOCAL_MOUNT_PATH/$ADDSHAREPATH$t
# Удаляем бэкапы старше $ROTATE
find $LOCAL_MOUNT_PATH/$ADDSHAREPATH$t -type f -mtime +$ROTATE -print0 | xargs -0 rm -f
done
# Размонтируем шару
sudo umount $LOCAL_MOUNT_PATH

Осталось лишь внести изменения в описанные переменные, положить файлик куда вам будет удобно, добавить права на выполнение скрипта (chmod +x backupdts.sh в папке со скриптом) и добавить задание в крон с необходимой периодичностью.
Добавляем задание:

# vi /etc/crontab

В конце файла вставляем строку

00 22   * * *    root   /home/dts/backupdts.sh

Т.е. я указал, что в 22:00 из папки /home/dts/ будет выполнен скрипт backupdts.sh от имени пользователя root

Надеюсь, что у вас всё получилось.
Если же нет, то добро пожаловать в раздел КОНТАКТЫ

IT-admins

IT-admins

info@it-admins.ru


IT-admins © 2020