Bash-скрипт резервного копирования БД 1С (файловый вариант)

By | 02.12.2016

Доброго времени суток!

Недавно, была поставлена задача написать скрипт на Bash, для резервного копирования (backup) файлового варианта базы данных (БД) 1С. Скрипт должен запускаться в определенное время, используя планировщик крон (cron). Для корректной работы скрипта, необходимо установить архиватор 7-zip,  модуль  p7zip для работы с rar-архивами и утилиту cifs-utils:

sudo apt-get -y install p7zip-rar p7zip-full cifs-utils

Файловая БД находится в сетевой шаре на сервере, под управлением Windows Server 2012 (winserv — 192.168.0.2), называется DB1C, полный сетевой путь: \\winserv\DB1C\ в данной директории лежат папки, с отдельными БД 1с, разделенные по годам, например ku2014, ku2015, ku2016 Архитектура сети — многоранговая, домен example.ru Сервер — хранилище резервных копий, под управлением ОС Ubuntu Server 14.04. Скрипт будет работать по следующему алгоритму:

#!/bin/bash
DATETODAY=`date +%d-%m-%Y`
#Максимальное количество копий (7 по умолчанию)
DELETEDAY=`date --date="7 days ago" +"%d-%m-%Y"`

echo "###################################TODAY IS $DATETODAY#############################"
echo "Delete OLD BACKUP day is $DELETEDAY"
SNAME=`echo $HOSTNAME`
echo "#########################This server hostname is \"$SNAME\"#############################"

#Указываем путь к сетевой шаре
SHARE="//192.168.0.2/DB1C/"
echo "Share path: $SHARE"
#Учетная запись на домене с правом подключения к данной шаре
DOMAIN=example.ru
USERNAME=backup
PASSWORD=142536
#Указываем наименование папки с БД 1с,которую необходимо зарезервировать
BACKUPBASE=ku2016
#Точка монтирования сетевой шары на данном ПК
SOURCE="/mnt/source/"
sleep 1
#Проверка наличия директории #SOURCE для монтирования сетевой шары (скрипт создает при отсутствии)
#checking $SOURCE directory exist
echo "checking $SOURCE directory exist..."
sleep 5
if ! [ -d $SOURCE ]; then
echo -e "No directory. creating $SOURCE ...\n"
sudo mkdir -p $SOURCE
sleep 1
echo "DONE!"
sleep 2
else
echo -e "Directory $SOURCE exist. Mounting $SHARE...\n"
sleep 2
fi
#Монтирование сетевой шары
#Mounting
echo "mounting CIFS share..($SHARE)"
mount -t cifs $SHARE -o username=$USERNAME,password=$PASSWORD,domain=$DOMAIN $SOURCE
sleep 2
#Путь до директории для создания резервных копий
BACKUPPATH=/mnt/backup1c/
#Проверка наличия директории $BACKUPPATH для создания резервных копий (скрипт создает при отсутствии)
#checking $BACKUPPATH directory exist
echo "checking $BACKUPPATH directory exist..."
sleep 5
if ! [ -d $BACKUPPATH ]; then
echo -e "No directory. creating $BACKUPPATH ...\n"
sudo mkdir -p $BACKUPPATH
sleep 1
echo "DONE!"
sleep 2
else
echo -e "Directory $BACKUPPATH exist. Start backuping...\n"
sleep 2
fi
#create log file 4today
#Создаем лог-файл с наименованием текущей даты
touch $BACKUPPATH$DATETODAY.log
ls $BACKUPPATH
#Удаляем файл старше максимально допустимого количества хранимых копий
echo "Deleting OLD backup folder: $DELETEDAY..."
rm -rf $BACKUPPATH$DELETEDAY.*
echo "Deleted!"
sleep 2
#Смотрим содержимое директории резервных копий после очистки устаревших данных
echo "now in $BACKUPPATH located: "
ls $BACKUPPATH
sleep 1
echo "`date +%d-%m-%Y-%H:%M` Backuping $BACKUPBASE DBs 1C to $BACKUPPATH, please wait..."
echo "Backuping started at `date +%d-%m-%Y-%H:%M`\n" >> $BACKUPPATH$DATETODAY.log
#Запускаем резервное копирование с логированием в одноименный лог-файл
sudo 7z a -mx9 $BACKUPPATH$DATETODAY.7z $SOURCE$BACKUPBASE  >> $BACKUPPATH$DATETODAY.log
#где -mx9 -ультра сжатие, для стандартного сжатия (с минимальной потерей времени), достаточно убрать данный параметр
#Основные параметры архивирования можно посмотреть тут: http://help.ubuntu.ru/wiki/7zip
echo "Backuping is DONE at `date +%d-%m-%Y-%H:%M`" >> $BACKUPPATH$DATETODAY.log
echo "`date +%d-%m-%Y-%H:%M` Backuping is done!"
sleep 1
#Отключаем сетевую шару (размонтируем)
echo "unmount mount point: ($SOURCE)"
umount $SOURCE
sleep 1
echo "All jobs is done..."
sleep 1

На OS Linux переходим в домашнюю директорию, создаем файл скрипта backup1c.sh и даем права на выполнение

cd
touch backup1.sh
sudo chmod +x backup1.sh

Открываем файл backup1c.sh и вставляем туда содержимое скрипта, сохраняем и закрываем.

sudo nano backup.sh
ctrl+x
shift+Y
"Enter"

Далее необходимо добавить задание в планировщик

sudo crontab -e

было выбрано время 22:00 каждый БУДНИЙ (понедельник-пятница) день, переходим в конец файла и добавляем следующую строку:

0 22 * * 1-5 /home/user/backup1c.sh

если посмотреть на следующий день, (после 22:00) в директории для хранения резервных копий /mnt/backup1c/ должны появиться 2 файла, на примере следующих:

ls
01-12-2016.log  01-12-2016.7z

Если посмотреть в лог, то в начале файла, в первой строке, будет указано время запуска резервного копирования, а в конце, время завершения копирования:

Backuping started at 01-12-2016-22:00
Backuping is DONE at 01-12-2016-22:15

На этом, создание скрипта резервного копирования БД 1С завершено, спасибо за внимание!

 

 

 

Поделиться!