Доброго времени суток!
Недавно, была поставлена задача написать скрипт на 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С завершено, спасибо за внимание!