Авто перезапуск сервера 1С и Резервное копирование баз данных 1С 7.х и 8.х

Сообщение от in on Apr 27, 2017 . 0 комментарии.

Автоматический перезапуск службы агента сервера 1С Предприятия 8.х

Поскольку служба агента сервера 1С Предприятия представляет собой стандартную службу, в арсенале Windows есть стандартный способ остановки и запуска служб из командной строки командами net stop и net start. 

Достаточно эти команды лишь включить в bat-файл и настроить шедулер на запуск bat-файла по расписанию, я настроил перезапуск один раз в сутки, в ночное время. Следует иметь ввиду, что если перезапускать рабочие процессы в рабочее время, все подключенные к серверу 1С Предприятия клиенты будут отключены!

Кроме того, чтобы немного разнести по времени команды остановки и запуска службы, будем использовать известную утилиту sleep.exe, которую легко найти в Сети.

Название службы берем из самой службы, в нашем примере это 1C:Enterprise 8.3 Server Agent

Примерный текст bat-файла restart1c.bat:

rem @echo off
rem Start script 1C restart
set logfile="1c_log.txt"
set timeout=20
echo %date% %time% >>%logfile%
net stop "1C:Enterprise 8.3 Server Agent" >>%logfile%
c:\Service\sleep %timeout%
echo %date% %time% >>%logfile%
net start "1C:Enterprise 8.3 Server Agent" >>%logfile%
c:\Service\sleep %timeout%
rem Finish script 1C restart

Объяснение используемых переменных и команд:

logfile - файл 1c_log.txt, куда будут записываться результаты выполнения команд, размещается в том же каталоге, что и сам bat-файл;

timeout - время в секундах;

c:\Service - каталог, где предполагается разместить программу sleep.exe, bat-файл и лог-файл;

 

Из этого же bat-файла можно сразу после перезапуска процессов запускать скрипт бэкапа средствами 1С Предприятия. В этом случае у вас гарантированно не будет подключен ни один клиент.

Необходимая ремарка: у пользователя, под которым будет выполняться задание по перезапуску службы должны быть соответствующие права на остановку и запуск служб сервера.

Через Планировщик заданий создаем задание на автоматическую ежедневную перезагрузку сервера в 5.30

Автоматическое резервное копирование баз 1С

 Создаем скрипт vbs и сохраняем его в C:ServiceBackup.vbs

Set WshShell = CreateObject("WScript.Shell")
dim d,m,y
                    
d = day(date())
if d < 10 then
   d = "0" & d
end if
                     
m = month(date())
if m < 10 then
   m = "0" & m
end if
                     
y = year(date())
                     
h = Hour(Time())
if h < 10 then
   h = "0" & h
end if
Min = Minute(Time())
if Min < 10 then
   Min = "0" & Min
end if
                     
S = Second(Time())
if S < 10 then
   S = "0" & S
end if
'Формируется полное имя файлов выгрузки и лога
s = d & "_" & m & "_" & y & "_" & h & "_" & Min & "_" & S
'Путь к файлу выгрузки
BackupPath = "/DumpIB C:\Service\Backup\RabDB_" & s & ".dt"
'Путь к логу
LogPath = "/Out C:\Service\Backup\RabDB_Log_" & s & ".log -NoT_runcate"
'Путь к фалу запуска программы 1С
one1CPath = """%systemdrive%\Program Files\1cv8\8.3.4.365\bin\1cv8.exe"""
'Параметры запуска базы (SQL)                имя кластераимя базы      пользователь    пароль
Paramters =  "DESIGNER /S sermac:1730\rabd /N Admin /P userpassword /DisableStartupMessages"
Set fs = CreateObject("Scripting.FileSystemObject")
'Запуск
WshShell.Run one1CPath & " " & Paramters& " " & LogPath & " " & BackupPath, 0, True 

Еще примеры автокопирования баз 1С Предприятие.

Для примера в нашем распоряжении имеются 3 сервера с различными версиями платформы:

  • SRV1 - с установленной платформой 1С 7.7
  • SRV2 - с установленной платформой 1С 8.1
  • SRV3 - с установленной платформой 1С 8.2

На всех серверах одинаковая разметка дисковой подсистемы:

  • На разделе C: имеем установленную систему Windows Server
  • На разделе Е: содержатся базы платформ
  • И наконец, на разделе I: будут содержаться резервные копии баз.

Автоматизировать резервное копирование мы будем посредством пакетного или по-другому bat-файла, который представляет собой текстовый файл с расширением .bat, в который записываются, а затем исполняются последовательности команд при помощи программы-интерпретатора (cmd.exe).

  • На сервере SRV1 установлен файловый вариант платформы 1С 7.7, расположенный в "E:\Базы\База 1С7.7".
  • На сервере SRV2 установлен файловый вариант платформы 1С 8.1, расположенный в "E:\Базы\База 1С8.1".
  • На сервере SRV3 установлен серверный вариант платформы 1С 8.2, расположенный в "E:\Базы\База 1С8.2". Кластер базы будет иметь название FirmaBuh.

Перед нами стоит задача: делать резервные копии указанных выше баз в назначенное время - 1:00 после плановой перезагрузки серверов в 00:00.

Для выполнения поставленной задачи, во-первых создадим на каждом разделе I наших серверов папки с названиями:

  • I:\Архив\База 1С7.7
  • I:\Архив\База 1С8.1
  • I:\Архив\База 1С8.2

После того, как мы создали основные каталоги для наших будущих архивов, приступим к написанию самих bat-ников. В данной статье bat-файлы располагаются в тех же каталогах что и архивы. На SRV1 в директории "I:АрхивБаза 1С7.7" создадим файл с названием backup77.bat

Не забываем задать расширение .bat. Архивировать базу на SRV1 мы будем с помощью бесплатного архиватора 7-zip, скачать который вы можете на сайте разработчика. Следует отметить, что в приведенном ниже методе происходит архивирование всего каталога с базой.

Откроем созданный нами файл с помощью блокнота. Запишем туда следующее:

chcp 1251
"C:\Program Files\7-Zip\7z.exe" a -t7z "I:\Архив\База 1С7.7\backup77-%date%.7z" -mx3 " E:\Базы\База 1С7.7" -ssw
@echo off
pause<br>

Рассмотрим детально написанный выше код. Команда chcp 1251 задает кодировку cp1251, т.е. все русские названия директорий будут восприниматься интерпретатором правильно (хотя в командной строке при запуске батника вы будете видеть нечитаемые символы).

Далее мы указываем путь к .exe файлу программы 7-zip. Команда а означает добавить данный каталог, а именно I:АрхивБаза 1С7.7 в архив "I:АрхивБаза 1С7.7backup77-%date%.7z", формат для которого мы задаем ключом -t7z. Т.е. мы получим архив с названием backup77-%date%.7z и форматом 7z, например: backup77-03.10.2011.7z

Параметр %date%, как вы уже догадались, задает дату на момент запуска архивирования. Ключ -mx3 задает уровень сжатия. В нашем примере он означает быстрое сжатие. На всякий случай здесь приведена команда -ssw. Она позволяет архивировать даже в том случае, если 1с 7.7 будет запущена. Дополнительную справку по всем ключам командной строки вы можете получить в русской документации к программе 7-zip.

Запустив bat-файл, вы сможете пронаблюдать весь процесс архивирования. Если вам это не надо, следует удалить команду pause, а @echo off переместить после команды chcp 1251.

На SRV2 в директории "E:\Базы\База 1С8.1" создадим файл с названием backup81.bat. В отличие от прошлого сервера, на этом архивирование мы будем проводить с помощью выгрузки базы напрямую через 1с 8.1, а не архивируя каталог с базой целиком.

chcp 1251
@echo off
setlocal
set kat=C:Program Files
set ver=1cv81
set base= E:\Базы\База 1С8.1
"%kat%%ver%bin1cv8.exe" CONFIG /F "%base%" /DisableStartupMessages /DumpIB "I:АрхивБаза 1С8.11c81_%date%.dt" /N Администратор /P 123 /OUT "I:АрхивБаза 1С8.1backup.log" -NoTruncate
echo %date% >> backup.log
endlocal

Параметр setlocal позволяет нам изменить переменные в пакетном файле. Мы можем обозначить путь вместо длинной строки просто двумя или тремя символами. К примеру, мы задаем путь к 1cv8.exe, при этом не вписываем целиком путь, а вначале просто даем обозначение каталогу, где располагается 1с и папки в которой находится наш exe. Параметр CONFIG запускает 1с 8.1 в режиме "Конфигуратора". После ключа /F указываем каталог с файлами БД, /DisableStartupMessages подавляет стартовые сообщения программы о различных предупреждениях. Для поставленной задачи они нам не нужны. Команда /DumpIB выгружает заданную базу в каталог I:АрхивБаза 1С8.1.

Выгруженный файл БД будет иметь вид 1c81_%date%.dt. К примеру: 1c81_03.10.2011.dt

Далее командами /N и /P задаются логин и пароль администратора базы соответственно. Затем происходит выгрузка лог файла параметром /OUT в каталог I:АрхивБаза 1С8.1 c именем backup.log. В него будут записывать результаты выгрузки базы:

Выгрузка информационной базы успешно завершена

Ключ -NoTruncate делает так, что лог файл не очищается каждый раз при запуске bat-ника. Так же в конце батника для удобства мы записываем дату выгрузки базы в лог-файл backup.log.

На SRV3 в директории "E\:Базы\База 1С8.2" создадим файл с названием backup82.bat. Конфиг, представленный ниже почти идентичен предыдущему, за исключением того, что запуск 1с происходит для серверного варианта установки. Соответственно, совпадающие параметры мы не будем описывать.

chcp 1251
echo off
setlocal
set kat=C:Program Files
set ver=1cv82
set serv=SRV3
set base=FirmaBuh
"%kat%%ver%bin1cv8.exe" CONFIG /S %serv%%base% /DisableStartupMessages /DumpIB "I:\Архив\База1С8.21c82_%date%.dt" /N Администратор /P 123 /OUT "I:АрхивБаза 1С8.2 backup.log" -NoTruncate
echo %date% >> backup.log
endlocal 

Стоит лишь отметить ключ /S после которого указывает адрес сервера 1С:Предприятия 8.2 в формате: Имя_СервераНазвание_Базы. В нашем случае это SRV3FirmaBuh. На этом мы окончательно разобрали выгрузку и архивирование баз платформ 1с 7.7, 8.1 и 8.2. Созданные нами bat-файлы можно добавить в любой планировщик. Мы использовали для этого стандартный планировщик заданий Windows. Как в примере выше.

В конце статьи хотелось бы привести код bat-файла, позволяющего автоматизировать проверку наличия файла с архивами. Запускать его можно с любого компьютера, но при этом каталоги с архивами должны быть открыты в общем доступе в сети.

chcp 1251
@echo off
setlocal
set arhiv1="\SRV1\Архив\База1С7.7 backup77-%date%.7z"
set arhiv2="\SRV2\Архив\База1С8.11c81_%date%*.dt"
set arhiv3="\SRV3\Архив\База1С8.21c82_%date%*.dt"
set kat1="\SRV1\Архив\База1С7.7"
set kat2="\SRV2\Архив\База1С8.1"
set kat3="\SRV3\Архив\База1С8.2"
set errlog="Лог-файл с ошибками архивирования баз.log"
set viewlog="C:\Users\Admin\Desktop\Ошибки архивирования баз.log"
if not exist %arhiv1% echo Дата: %date% Время: %time% Сервер SRV1 сообщает: в папке %kat1% файлы архива не найдены >> %errlog%
if not exist %arhiv2% echo Дата: %date% Время: %time% Сервер SRV2 сообщает: в папке %kat2% файлы архива не найдены >> %errlog%
if not exist %arhiv3% echo Дата: %date% Время: %time% Сервер SRV3 сообщает: в папке %kat3% файлы архива не найдены >> %errlog%
echo. >> %errlog%
copy %errlog% %viewlog% /a

Bat-файл проверяет наличие файлов архивов на серверах и, если не находит, то записывает лог-файл с ошибками, который создается в том каталоге, в котором он был запущен. Строка copy %errlog% %viewlog% /a копирует лог-файл на рабочий стол Администратора. Таким образом, придя на работу, вы можете, заглянув в Ошибки архивирования баз.log увидеть список отсутствующих архивов. Сам bat-ник можно добавить опять же в планировщик.

Последнее обновление: Apr 27, 2017

Комментарии

Написать комментарий

Ответить на комментарии

* Имя:
* E-mail: (Не Публикуется)
   Сайт: (Ссылка на сайт с http://)
* Комментарии:
Разработка сайтов glGizma.ru
Компьютерная помощь Новосибирск © 2024