Запуск 1С 8.* от имени службы с мониторингом состояния и перезапуском

Использование srvany.exe и скрипта на wsh для запуска 1с 8 в качестве службы и ее мониторинга.

Введение

Несмотря на то, что в 1с 8 есть прекрасный механизм регламентных заданий, полностью автоматически он работает только в клиент-серверном варианте, а в файловом варианте 8.2 нужно запускать отдельный сеанс для работы регламентых заданий. Также иногда возникает необходимость запустить какую-то  обработку в режиме 1с Предприятия в автоматическом режиме (Пример такой обработки система Моби-С которая свой сервер реализует в  виде com-обьекта запущенного из обработки). Лучшим вариантом запуска в случаях как мне кажется, является запуск 1С от имени службы.  Думаю, плюсы такого решения всем понятны. Стандартный механизм запуска 1С как службы через использование утилиты srvany.exe обладает следующими недостатками:
-если 1с не запустилась при старте службы то уже и не запустится,
— нельзя периодически запускать 1с,
-если 1с зависла srvany.exe ничего не предпримет для перезапуска 1С Предприятия
 
Решение
Для  решения всех перечисленных проблем был написан скрип на vbscript который берет на себя всю работу по запуску и контролю за работой запущенного экземпляра 1С. Сам метод запуска службы не изменился это все тот-же srvany.exe только теперь он запускает не 1С, а скрипт который уже занимается запуском 1с исходя из своих настроек указанных в специальном файле.
Что может данный скрипт:
1. Запускать и перезапускать 1с с указанным в настройках скрипта интервалом.
2. Мониторить запущенный скриптом экземпляр 1С. Опрашивая через WMI раз в минуту значение счетчиков производительности Windows для процесса с PID запущенного экземпляра 1C и в случае если в течении пяти минут замеры производительности не изменились принимается решение что экземпляр 1C зависал запущенный процесс 1С убивается. В случае если положиться на счетчики производительности нельзя, можно настроить мониторинг даты/времени изменения спец.файла pulse.txt и также если он не изменялся (дополнительно к счетчикам производительности) то процесс 1С будет убит.  Конечно  дату/время изменения спец.файла pulse.txt запущенная копия 1С должна обновлять сам периодически иначе толку от такой проверки не будет.
3. Мониторить в определенном в настройках скрипта месте наличие файла fclose и если он найден то завершать работу запущенного экземпляра 1С.
4.  Мониторить в определенном в настройках скрипта месте наличие файла fkill и если он найден то завершать работу запущенного экземпляра 1С и больше не запускать 1С пока файл fkill не будет удален. Отличие от файла fclose в том, что файл fclose удаляется после завершения процесса 1С  т.е. с помощью него можно принудительно перезапустить процесс 1С
5. Мониторить в определенном в настройках скрипта месте наличие файла fstop и если он найден  больше не запускать 1С пока файл fstop не будет удален.
6. В случае если 1с будет зависать при трех последовательных запусках, скрипт может отправить сообщение на почту системного администратора или программиста.

 Установка службы

 1. Папку из архива поместить в корень диска. (Работу с папками в пути к которым есть пробелы не проверял, поэтому по возможности не используйте папки с пробелами)
2.  Под администратором запустить командный сценарий InstallSrv.cmd, который установит службу в системе
3.  Зайти в Administrative Tools->Component Services раздел DCOM Config найти объект  Microsoft WBEM Unsecured Apartment отрыть ее свойства и на вкладке Security дать право для типа входа СЛУЖБА на Local Launch и Local Activation. Это очень важно т.к. без этой настройки скрипт не сможет мониторить корректное завершение процесса 1С.
4. Отредактировать настройки скрипта в файле SrvConfig.ini.
5. Если  необходимо изменить интервал перезапуска 1С. Для этого отредактируйте строку Const RestartPauseSec = 60 в файле скрипта 1C_srv.vbs
6. Заполнить в файле Operators.ini данные для отправки уведомлений о зависании 1С по электронной почте.
Все служба готова к работе.
Можно добавлять неограниченное количество служб в систему главное, чтобы они были в разных папках и в случае если у Вас Windows 32-х битная, то разные службы должны запускаться от разных пользователей Windows.
Все необходимые для работы файлы в архиве. Спасибо за внимание.

 

Небольшое обновление. В первой версии скрипта была допущена ошибка, приводящая к тому, что 1С больше не запускалась в случае неудачной попытки запуска процесса 1С.

3 Comments

  1. vec435

    как вариант — запуск 1С из ярлыка с параметром /Execute в который передаешь полный путь к обработке

    Reply
  2. dumsik

    (1) vec435, это конечно хорошо но проблему с перезапуском 1с в случае зависания это никак не решит. Да и запустить ярлык часто просто некому (допустим комп ночью перезагрузился и т.д.). Помещение ярлыка в автозагрузку не предлагать 🙂

    Reply
  3. hackoff

    Спасибо огромное скрипт пригодился. Правда пришлось убрать кусок. С ним не работало.

    ‘If bAppDBType=0 Or Not Len(bAppDBType)>0 Then

    ‘ bAppDBType=0 ‘возможно небыло значения в файле настроек тогда считаем базу файловой

    ‘ If Not objFSO.FileExists(sAppDBAdress) Then

    ‘ SaveEventToLog «Каталог БД » & sAppDBAdress & » не найден !»

    ‘ WScript.Quit 1

    ‘ End if

    ‘Else

    ‘ bAppDBType=1 ‘на всякий случай любые даннные отличные от нуля это будет серверная база

    ‘End if

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *