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


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

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

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

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

Для выгрузки баз нам необходимо запускать GUI версию 1с-клиента. Так как ставить среду рабочего стола — это неспортивно, то был выбран обходной путь - Xvfb. Xvfb — это X11 сервер, который выполняет все графические операции в памяти без вывода на экран.

Для начала установим некоторые компоненты:

sudo apt install -y libwebkitgtk-3.0-0 xvfb
sudo apt install -y libwebkitgtk-3.0-0:i386 xvfb
sudo apt install dbus-x11
sudo apt-get install ntfs-3g ntfs-config cifs-utils -y

По этой ссылке вы можете скачать сам скрипт, комментариев в котором на мой взгляд более, чем достаточно.
Если вы захотите протестировать скрипт до добавления его в крон, то имейте в виду, что запускать его надо командой xvfb-run -a backupdts.sh

#!/bin/bash
# Путь к виндовой шаре
SHAREPATH="//10.10.0.200/BackUps"
#Дополнительный путь внутри шары если присутствует, или "" при отсутствии (обращаем внимание на слэш в конце пути)
ADDSHAREPATH="1c-srv/"
# Точка монтирования
LOCAL_MOUNT_PATH="/mnt/BackUps"
# Домен шары
DOMAIN="mydomain"
# Пользователь шары
USER="myusername"
# Пароль шары
PASSWORD="mydomainuserpassword"
# Логин пользователя с правами Администратора БД 1с
DB_ADMIN="admin"
# Пароль Администратора базы 1с
DB_ADMIN_PASSWORD="admin_password"
# Получаем текущую дату
NOW=$(date +"-"%d"."%m"."%Y)
# Задаем количество дней ротации резервных копий БД
ROTATE=14
# Через пробел в кавычках заполняем массив значениями БД на сервере
allBases=("zup" "bp2018" "bp2020" "sklad2018")

# Монтируем 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
# выполняем перезапуск сервиса 1с дабы запустить копирование до включения регламентых заданий. Если же регламентые задания отключены, то комментим следующую строку
sudo service srv1cv83 stop && sudo service srv1cv83 start
# выгружаем БД
/opt/1C/v8.3/x86_64/1cv8 CONFIG /DumpIB $t$NOW.dt /Out out.log /S 127.0.0.1\\$t /N $DB_ADMIN /P $DB_ADMIN_PASSWORD /DumpResult result.log
# переносим в папку с бэкапами
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

Отдельно разберу команду выгрузки:
/opt/1C/v8.3/x86_64/1cv8 CONFIG /DumpIB $t$NOW.dt /Out out.log /S 127.0.0.1\\$t /N $DB_ADMIN /P $DB_ADMIN_PASSWORD /DumpResult result.log

  • /opt/1C/v8.3/x86_64/1cv8 - путь и запускаемое приложение (проверьте у себя);
  • CONFIG - запуск конфигуратора;
  • /DumpIB $t$NOW.dt - выгружаем базу в файл $t$NOW.dt, имя которого формируется из переменной $t (имя базы из массива) и переменной $NOW (текущая дата);
  • /Out out.log - файл лога;
  • /S 127.0.0.1\\$t - путь клиент-серверной базы;
  • /N $DB_ADMIN /P $DB_ADMIN_PASSWORD - имя пользователя и пароль информационной базы;
  • /DumpResult result.log - результат выполнения (0 - удачно, 1 - неудачно).

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

crontab -e

Небольшое пояснение по параметрам времени запуска:

* * * * *   - выполняемая команда

- - - - -

|  |  |  |  |

|  |  |  | ----- День недели (0 - 7) (Воскресенье =0 или =7)
|  |  | ------- Месяц (1 - 12)
|  | --------- День (1 - 31)
| ----------- Час (0 - 23)
------------- Минута (0 - 59)

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

00 22   * * *    xvfb-run -a /home/dts/backupdts.sh

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

P.S. Позднее к скриптику я прикрутил отправку уведомления на почту о завершении выгрузки баз. Сначала установим ssmtp и отредактируем его настройки (не забываем изменить "mailserver" на адрес своего почтовика и добавить необходимую авторизацию):

sudo apt install ssmtp -y
sudo echo hostname=1c-srv > /ect/ssmtp/ssmtp.conf
sudo echo root=it@mailserver.ru >> /ect/ssmtp/ssmtp.conf
sudo echo mailhub=mail.mailserver.ru >> /ect/ssmtp/ssmtp.conf
sudo echo rewriteDomain=mailserver.ru >> /ect/ssmtp/ssmtp.conf
sudo echo AuthUser= >> /ect/ssmtp/ssmtp.conf
sudo echo AuthPass= >> /ect/ssmtp/ssmtp.conf
sudo echo FromLineOverride=YES >> /ect/ssmtp/ssmtp.conf
sudo echo UseTLS=YES >> /ect/ssmtp/ssmtp.conf

В конце скрипта просто добавил следующие строки (обращаем внимание на имя почтового сервера):

touch /home/dts/headers
echo Date: $NOW > /home/dts/headers
echo From: 1c_export@mailserver.ru >> /home/dts/headers
echo To: it@mailserver.ru >> /home/dts/headers
echo Subject: Выгрузка БД 1с от $NOW >> /home/dts/headers
echo Content: Выгрузка завершена >> /home/dts/headers
ssmtp it@mailserver.ru < /home/dts/headers

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

IT-admins

IT-admins

8.00 - 17.00

☎ +7 (905) 480-54-70
☎ +7 (917) 199-81-13
info@it-admins.ru


IT-admins © 2020