Что делать, если зависли регламентные задания в 1С, а перезагружать сервер нельзя?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Шаг 1. Проверка блокировки регламентных заданий в свойствах базы

Прежде чем приступать к низкоуровневым операциям с процессами, выясним причину остановки заданий на уровне конфигурации и кластера. Нередко выполнение расписания блокируется регламентными процедурами обслуживания или действиями администраторов.

  1. Откроем консоль администрирования серверов 1С:Предприятия.
  2. Перейдем в ветку Информационные базы и откроем свойства рабочей базы.
  3. Проверим состояние параметра Блокировка регламентных заданий включена. Если флаг установлен, снимем его и применим изменения.
  4. Если база доступна, откроем стандартную обработку Регламентные и фоновые задания (в конфигурациях на базе БСП она доступна в разделе администрирования). Выберем проблемное задание, снимем признак Использование, запишем изменения, а затем снова включим и сохраним. Это действие сбрасывает зависшую внутреннюю очередь планировщика для конкретной задачи.

Шаг 2. Бесшовный перезапуск зависшего рабочего процесса rphost

Если конкретное фоновое задание зависло наглухо и удерживает рабочий процесс, можно принудительно завершить только проблемный процесс rphost, не разрывая работу остальных пользователей. Рассмотрим подробнее, как безопасно выполнить миграцию сеансов:

  1. В консоли кластера 1С перейдем в раздел Сеансы или Фоновые задания и определим идентификатор зависшей задачи.
  2. В свойствах сеанса найдем связанный с ним рабочий процесс (rphost) и зафиксируем его сетевой порт и системный идентификатор (PID).
  3. Перейдем в ветку Рабочие процессы кластера, откроем свойства проблемного процесса и изменим его статус на Не использовать (при условии, что в кластере настроено несколько рабочих процессов).
  4. Ждем 5–10 минут: кластер автоматически переведет новые подключения и активные сеансы пользователей на соседние рабочие процессы.
  5. В диспетчере задач операционной системы или через системный монитор находим процесс rphost.exe (или rphost в Linux) с ранее зафиксированным PID и принудительно завершаем его. Зависшее фоновое задание перейдет в статус ошибки или отмены.
  6. Возвращаемся в консоль администрирования кластера 1С и переводим рабочий процесс обратно в режим Использовать.

Шаг 3. Завершение зависшей транзакции на стороне СУБД

Часто причиной зависания фонового задания становятся длительные блокировки или ожидание внешнего ресурса на уровне базы данных. В этом случае прервать зависшую транзакцию можно напрямую в СУБД:

  1. В консоли кластера 1С в свойствах проблемного сеанса смотрим значение поля Номер соединения СУБД (SPID / PID).
  2. Подключаемся к системе управления базами данных и принудительно завершаем сессию:

Для Microsoft SQL Server выполняем команду:

KILL 125; -- где 125 - SPID зависшего соединения

Для PostgreSQL используем системную функцию:

SELECT pg_terminate_backend(14820); -- где 14820 - PID процесса СУБД

После снятия блокировки в СУБД сеанс 1С завершится аварийно, освободит ресурсы кластера и позволит следующим заданиям запуститься в штатном режиме.

Шаг 4. Временный запуск регламентных заданий в обход планировщика

Если планировщик кластера полностью перестал обрабатывать очередь, а перезагрузка службы невозможна до конца рабочего дня, организуем временный принудительный запуск критически важных заданий (например, обмена данными или закрытия кассовых смен).

Разберем пример создания внешней обработки, запускающей необходимое регламентное задание через обработчик ожидания клиентского приложения:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Подключаем обработчик с интервалом запуска 300 секунд (5 минут)
    ПодключитьОбработчикОжидания("ВыполнитьРегламентнуюПроцедуру", 300);
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьРегламентнуюПроцедуру()
    ВыполнитьЗаданиеНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВыполнитьЗаданиеНаСервере()
    Задание = РегламентныеЗадания.НайтиПоНаименованию("ЗагрузкаДанных");
    Если Задание <> Неопределено Тогда
        // Запускаем фоновое задание вручную в обход внутреннего таймера
        Задание.ВыполнитьРаботу();
    КонецЕсли;
КонецПроцедуры

Также можно использовать запуск тонкого или толстого клиента в пакетном режиме через Планировщик задач операционной системы с передачей параметра командной строки /Execute <ПутьКОбработке>, где в модуле обработки после исполнения метода вызывается ЗавершитьРаботуСистемы().

Настройка кластера для предотвращения зависаний в будущем

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

  1. Автоматический перезапуск рабочих процессов: в свойствах кластера зададим Интервал перезапуска (например, 86400 секунд) и настроим Допустимый объем памяти. Кластер будет автоматически обновлять процессы rphost без влияния на работу пользователей.
  2. Требования назначения функциональности: выделим отдельный рабочий процесс или сервер под обслуживание сервисов Сервис фоновых заданий и Сервис регламентных заданий, изолировав их от тяжелых интерактивных запросов пользователей.
← На главную