Как гарантированно заблокировать фоновые задания при обновлении 1С?

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

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

Разберемся в терминологии: Регламентные vs Фоновые

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

В платформе 1С существует два типа автоматических задач:

  1. Регламентные задания — это задачи, которые запускаются по расписанию. Ими управляет планировщик кластера серверов. Когда мы ставим галочку «Блокировка регламентных заданий» в консоли администрирования, мы отключаем именно планировщик.
  2. Фоновые задания — это программные потоки, которые могут быть порождены регламентным заданием, но также могут быть запущены явно из кода конфигурации (например, при старте сеанса пользователя или при нажатии кнопки в интерфейсе).

Важный нюанс: Если при запуске программы в режиме «Предприятие» код конфигурации (например, подсистема обновления БСП) явно инициирует выполнение ФоновыеЗадания.Выполнить(), то блокировка регламентных заданий в консоли сервера не остановит этот процесс. Сервер считает это легитимным действием текущего пользователя.

Почему не работают параметры запуска?

Часто мы пытаемся использовать ключи командной строки, такие как:

Давайте проясним ситуацию. Эти параметры отлично работают для файловых баз данных. В клиент-серверном варианте (SQL) управление заданиями берет на себя менеджер кластера серверов 1С. Параметры, переданные клиентскому приложению, могут игнорироваться сервером, так как логика запуска заданий находится на стороне сервера, а не клиента.

Решение 1: Имитация режима «Копия базы» или «Перемещение базы»

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

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

Как мы можем это использовать:

  1. Существуют внешние инструменты (например, StartStopBlocScheduledTasks.epf или аналогичные инструменты администрирования), которые позволяют принудительно установить режим блокировки регламентных заданий с определенными параметрами. Подойдёт готовый универсальный инструмент для администрирования 1С.
  2. Этот режим работает глубже, чем просто галочка в консоли, так как он влияет на логику работы самой конфигурации.

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


УстановитьБлокировкуРегламентныхЗаданий(
    Новый БлокировкаРегламентныхЗаданий(Истина, ТекущаяДата() + 3600) // Блокировка на час
);

Решение 2: Консоль администрирования + Перезапуск службы

Иногда галочка «Блокировка регламентных заданий» в свойствах информационной базы в консоли кластера не срабатывает мгновенно. Это может быть связано с тем, что менеджеру кластера требуется время на применение настроек к рабочим процессам. Для автоматизации этого процесса на серверах (в том числе под Linux) можно использовать решение для автоматической установки и снятия блокировок у БД.

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

  1. Открываем консоль администрирования серверов 1С.
  2. В свойствах информационной базы устанавливаем флаг «Блокировка регламентных заданий включена».
  3. Для надежности можно указать дату и время начала и окончания блокировки, но если оставить поля пустыми, блокировка будет бессрочной.
  4. Нажимаем «Применить» или «ОК».
  5. Критически важный шаг: Перезапускаем службу агента сервера 1С (1C:Enterprise 8.3 Server Agent) или перезагружаем рабочие процессы. Это сбросит все текущие соединения и заставит сервер перечитать настройки блокировок при старте.

Решение 3: Блокировка на уровне СУБД (PostgreSQL)

Если база данных работает на PostgreSQL и вы видите, что несмотря на все блокировки, процессы 1С продолжают «висеть» в базе, мы можем действовать радикально со стороны СУБД. В такой ситуации будет крайне полезно проанализировать SQL сервер глазами 1С-ника, чтобы точно идентифицировать проблемные сессии.

Фоновые задания 1С отображаются в PostgreSQL как активные подключения. Мы можем вычислить их и завершить принудительно.

Для просмотра активности используем запрос:

SELECT * FROM pg_stat_activity WHERE datname = 'ИмяВашейБазы';

Если вы идентифицировали процесс, который мешает (по длительности выполнения или тексту запроса), его можно завершить:

SELECT pg_terminate_backend(pid_процесса);

Однако помните, что сервер 1С может попытаться перезапустить процесс, поэтому этот метод лучше комбинировать с первыми двумя.

Решение 4: Правильный запуск процедуры обновления

В новых версиях конфигураций (КА 2.5, ERP 2.5) используется механизм отложенного обновления. Ошибка часто возникает из-за конфликта основного сеанса обновления и фонового задания отложенного обновления. Чтобы избежать проблем, можно использовать специализированный инструмент для запуска процедур обработчиков обновления.

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

/C ЗапуститьОбновлениеИнформационнойБазы

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

Резюме

Если при обновлении вы сталкиваетесь с «неубиваемыми» фоновые заданиями:

  1. Убедитесь, что вы единственный пользователь в базе — для этого есть инструмент завершения сеансов перед обновлением базы.
  2. Используйте консоль сервера 1С для блокировки регламентных заданий, но обязательно перезагрузите службу сервера после установки галочки, если изменения не применяются сразу.
  3. Наиболее действенным программным способом является перевод базы в режим, аналогичный «Копии базы» (через специализированные обработки или код УстановитьБлокировкуРегламентныхЗаданий), так как это отключает активность на уровне логики конфигурации.
  4. Используйте правильные ключи запуска (/C) для инициализации процесса обновления.
← На главную