Введение
Несмотря на то, что в 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С.
как вариант — запуск 1С из ярлыка с параметром /Execute в который передаешь полный путь к обработке
(1) vec435, это конечно хорошо но проблему с перезапуском 1с в случае зависания это никак не решит. Да и запустить ярлык часто просто некому (допустим комп ночью перезагрузился и т.д.). Помещение ярлыка в автозагрузку не предлагать 🙂
Спасибо огромное скрипт пригодился. Правда пришлось убрать кусок. С ним не работало.
‘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