Заметки сисадмина

Автоматический перезапуск службы агента сервера 1С - скрипт + расписание

Добрый день. Поступила заявка от 1С-ников, что необходимо ночью перезапускать службу агента сервера 1С на 8-ке. Как многим известно, что данную службу просто так нельзя "перезапустить", иначе зависшие сессии так и остаются "висеть", ее необходимо сначала остановить, а после снова запустить. Порывшись немного в интернете, пересмотрев кучу скриптов - собрал из многообразия один, не большой, полностью рабочий, уже оттестировал его на серверах, теперь выкладываю на ваше обозрение и пользование.

Автоматический перезапуск службы агента сервера 1С - скрипт + расписание


Скрипт перезапуска службы агента сервера 1С


В данном разделе я приведу скрипт .bat, который у меня получился, а так же дам краткое описание того, что за что отвечает в моем случае.

Собственно сам скрипт:

@echo off

set logfile="C:\!Distr\script\stopstartlog.txt" echo %date% %time% >>%logfile%
net stop "1C:Enterprise 8.3 Server Agent (1640)" >>%logfile%
ping -n 16 localhost>Nul echo %date% %time% >>%logfile%
net start "1C:Enterprise 8.3 Server Agent (1640)" >>%logfile%
ping -n 301 localhost>Nul SetLocal EnableExtensions
Set ProcessName=1C:Enterprise 8.3 Server Agent (1640)
TaskList /FI "ImageName EQ %ProcessName%" | Find /I "%ProcessName%" If %ErrorLevel% NEQ 0 net start "1C:Enterprise 8.3 Server Agent (1640)"
exit

Давайте рассмотрим его подробнее:
  1. Первым делом отключаем уведомления о выполнении, пусть это все работает в фоновом режиме
  2. Далее указываем где будет хранится наш лог-файл, куда будет писаться дата и время запуска и остановки службы (можно не писать лог, но на всякий случай пусть будет)
  3. Пишем в Лог дату и время начала остановки
  4. Останавливаем службу агента сервера, в моем случае она называется так - 1C:Enterprise 8.3 Server Agent (1640) и пишем ее статус в лог файл (ниже приведу пример что в логе появляется)
  5. Далее делаем задержку в 15 секунд, чтобы дождаться, пока служба останавливается (пинг равен примерно 1 секунде, первый проходит моментально, поэтому делаем время в секундах +1)
  6. Опять записываем в лог дату в время
  7. Запускаем службу обратно
  8. Делаем задержку в 5 минут, если служба не остановилась за 15 секунд, то она не запустится естественно, что то видимо зависло сильно и будем ждать 5 минут.
  9. Далее проверяем, запустилась ли служба и работает ли она? Если не работает, то выполняем ее повторный старт.
  10. Завершаем работу с cmd.
Все, вот такой вот получился скрипт. Я не программист, поэтому может он не совсем верный с точки зрения выполнения сценариев и программного кода, но для меня важно, чтобы это работало - а это работает! Данный скрипт у меня выполняется каждый день, каждый час с 00:00 до 7:00, но об этом позже.

Пример лог файла:

12.10.2017 0:00:00,10
Служба "Агент сервера 1С:Предприятия 8.3 (1640)" останавливается.....
Служба "Агент сервера 1С:Предприятия 8.3 (1640)" успешно остановлена.
12.10.2017 0:00:15,33
Служба "Агент сервера 1С:Предприятия 8.3 (1640)" запускается.
Служба "Агент сервера 1С:Предприятия 8.3 (1640)" успешно запущена.
12.10.2017 1:00:00,15
Служба "Агент сервера 1С:Предприятия 8.3 (1640)" останавливается....
Служба "Агент сервера 1С:Предприятия 8.3 (1640)" успешно остановлена.
12.10.2017 1:00:15,37
Служба "Агент сервера 1С:Предприятия 8.3 (1640)" запускается.
Служба "Агент сервера 1С:Предприятия 8.3 (1640)" успешно запущена.

Настройка выполнения *.bat по расписанию


Как я уже говорил выше, выполнение скрипта у меня происходит автоматически, каждый день он запускается ежечасно с 00:00 до 7:00. Сейчас я расскажу, как это сделано у меня.

Для начала идем в "Пуск -> панель управления -> Администрирование" и запускаем там "Планировщик заданий".

Выбираем пункт "Создать задачу":

На вкладке "Общие" задаем имя задания, его описание и пользователя, от которого оно будет выполняться. По умолчанию там будет пользователь, под которым вы вошли в данный момент в систему.

 

Далее идем в закладку Триггеры и настраиваем, когда нам надо запускать задачу.  В моем случае это ежедневно выполнять в 00:00 и повторять ее каждый час в течении 7 часов.

Далее идем во вкладку Действия и создаем действие на выполнения скрипта.

Все, на этом все готово.  Как можем увидеть в журнале, задача с такими параметрами успешно выполняется и ровно то время, которое у нас задано в скрипте:

Заключение


Вот так не очень сложно создается скрипт на перезапуск службы агента сервера 1С и настраивается его расписание. Я думаю что многие итак знают как сделать одно или второе, но я думаю что кому то это пригодится. Если у Вас возникнут проблемы или вопросы - задавайте их в комментариях, постараюсь помочь чем смогу. Если будут какие-то дополнения или предложения - с удовольствием тоже выслушаю.

Так же можно почитать про скрипт - удаление файлов старше n дней

Поделиться
Комментарии
viktor 20.11.2017 13:47
Den dobrii, a zachem perezapuskat kazhdii chas???? vrode dostatochno odnogo raza....
Admin 20.11.2017 14:04
Добрый! Да, одного раза вполне достаточно, но делалось это по ТЗ 1С-ников, поэтому выложил как есть, может требуется еще кому то так. Если вам необходимо 1 раз, просто не устанавливайте повтор в дополнительных параметрах.
Valerij 06.04.2018 16:33
Спасибо, работает, адаптировал его под некоторые свои нужды
Виталий 09.04.2018 07:04
Не за что! Рад, что вам пригодилось! =)
Sydor 29.05.2018 11:17
http://tehnopost.info/computer/27-zaderjka-v-bat-files.html timeout /t 15 /nobreak
Alexandepz 19.12.2018 09:53
Лог сохраняется в CP866, а надо бы таки в 1251-й. Добавляю в начало батника chcp 1251, но тогда он вообще отказывается исполняться. В чём может быть проблема?
Alexandepz 19.12.2018 10:00
Уточню. Смысл в том, что cmd по умолчанию работает в этой кодировке, и соответственно на выходе в текстовике лога получаются классические кракозябы из-за того, что ни несчастный блокнот, ни даже Word не понимают этой кодировки. Лезть в реестр с целью исправления этой проблемы точно не хочется, т.к. это повлияет не только на кодировку в утилите командной строки, а на всю ОС. Есть ли другие обходные пути решения этого вопроса?
Виталий 20.12.2018 15:26
Странно, у меня именно этим скриптом выполняется и я блокнотом открываю лог и все читается
Юрий 03.03.2019 10:04
Виталий! Выражаю огромную благодарность, перерыл много сайтов и самый простой и действительно рабочий скрипт у вас!
Виталий 04.03.2019 20:00
Очень рад, что Вам помогло!
11.04.2019 17:03
Так перезагружая сервер выкидываются пользователи как избежать выкидывание пользователей?*
Виталий 12.04.2019 10:22
Эммм, перезапустить службу 1С и при этом не выкинуть пользователей?... Ну наверное никак..
1C-ник 04.05.2019 07:10
не помешает рег.задание на блокировку ИБ с соответствующим описанием перед тем как всех выкинет без предупреждения
Ян 20.05.2019 13:36
Спасибо! Отличный скрипт - все работает!
Влад 25.10.2019 13:18
Не получается Результат последнего запуска: (0x000013A) если просто запустить bat Системе не удается найти указанный путь. Системе не удается найти указанный путь.
Влад 25.10.2019 13:20
Извиняюсь, не заменил set logfile="C:!Distrscriptstopstartlog.txt" На свой путь ниндзя
Влад 25.10.2019 13:21
Теперь правда Неправильное имя службы. Для вызова дополнительной справки наберите NET HELPMSG 2185.
Влад 25.10.2019 13:27
В свойствах службы вверху 1C:Enterprise 8.3 Server Agent (x86-64)
Максим Орлов

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

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

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