При обновлении крупных конфигураций, таких как «1С:Комплексная автоматизация» или «1С:ERP», администраторы часто сталкиваются с ситуацией, когда стандартные методы блокировки в консоли серверов не срабатывают должным образом. Мы блокируем регламентные задания, но при запуске предприятия все равно появляются фоновые процессы, которые мешают монопольному выполнению обработчиков обновления. В этой статье мы подробно разберем, почему так происходит, и рассмотрим проверенные способы решения этой проблемы.
Прежде чем переходить к решениям, нам необходимо четко понимать разницу между процессами, так как именно путаница в понятиях часто ведет к неправильным действиям. Для мониторинга и управления этими процессами лучше использовать продвинутую консоль регламентных и фоновых заданий, которая дает больше возможностей, чем стандартные инструменты.
В платформе 1С существует два типа автоматических задач:
Важный нюанс: Если при запуске программы в режиме «Предприятие» код конфигурации (например, подсистема обновления БСП) явно инициирует выполнение ФоновыеЗадания.Выполнить(), то блокировка регламентных заданий в консоли сервера не остановит этот процесс. Сервер считает это легитимным действием текущего пользователя.
Часто мы пытаемся использовать ключи командной строки, такие как:
/SchJobDn/AllowExecuteScheduledJobs -offДавайте проясним ситуацию. Эти параметры отлично работают для файловых баз данных. В клиент-серверном варианте (SQL) управление заданиями берет на себя менеджер кластера серверов 1С. Параметры, переданные клиентскому приложению, могут игнорироваться сервером, так как логика запуска заданий находится на стороне сервера, а не клиента.
Это наиболее надежный метод, который помог в рассматриваемой ситуации. Суть его заключается в использовании механизмов Библиотеки Стандартных Подсистем (БСП).
Когда информационная база перемещается, платформа может установить ей признак блокировки регламентных заданий. БСП, видя этот признак (или признак того, что база является копией), программно запрещает запуск любых фоновых процессов, связанных с обменами, рассылками и тяжелыми расчетами, даже если они вызываются кодом при старте. В ряде случаев может потребоваться возможность обхода блокировки регламентных заданий при работе в копиях, если вам нужно точечно управлять этим процессом.
Как мы можем это использовать:
StartStopBlocScheduledTasks.epf или аналогичные инструменты администрирования), которые позволяют принудительно установить режим блокировки регламентных заданий с определенными параметрами. Подойдёт готовый универсальный инструмент для администрирования 1С.Если у вас нет такой обработки, аналогичного эффекта можно добиться программно, выполнив следующий код в консоли кода (если есть доступ):
УстановитьБлокировкуРегламентныхЗаданий(
Новый БлокировкаРегламентныхЗаданий(Истина, ТекущаяДата() + 3600) // Блокировка на час
);
Иногда галочка «Блокировка регламентных заданий» в свойствах информационной базы в консоли кластера не срабатывает мгновенно. Это может быть связано с тем, что менеджеру кластера требуется время на применение настроек к рабочим процессам. Для автоматизации этого процесса на серверах (в том числе под Linux) можно использовать решение для автоматической установки и снятия блокировок у БД.
Чтобы гарантировать применение настройки, выполним следующие шаги:
1C:Enterprise 8.3 Server Agent) или перезагружаем рабочие процессы. Это сбросит все текущие соединения и заставит сервер перечитать настройки блокировок при старте.Если база данных работает на PostgreSQL и вы видите, что несмотря на все блокировки, процессы 1С продолжают «висеть» в базе, мы можем действовать радикально со стороны СУБД. В такой ситуации будет крайне полезно проанализировать SQL сервер глазами 1С-ника, чтобы точно идентифицировать проблемные сессии.
Фоновые задания 1С отображаются в PostgreSQL как активные подключения. Мы можем вычислить их и завершить принудительно.
Для просмотра активности используем запрос:
SELECT * FROM pg_stat_activity WHERE datname = 'ИмяВашейБазы';
Если вы идентифицировали процесс, который мешает (по длительности выполнения или тексту запроса), его можно завершить:
SELECT pg_terminate_backend(pid_процесса);
Однако помните, что сервер 1С может попытаться перезапустить процесс, поэтому этот метод лучше комбинировать с первыми двумя.
В новых версиях конфигураций (КА 2.5, ERP 2.5) используется механизм отложенного обновления. Ошибка часто возникает из-за конфликта основного сеанса обновления и фонового задания отложенного обновления. Чтобы избежать проблем, можно использовать специализированный инструмент для запуска процедур обработчиков обновления.
Чтобы выполнить обновление корректно и минимизировать запуск лишних фоновых задач, рекомендуется запускать 1С со специальным ключом параметра запуска:
/C ЗапуститьОбновлениеИнформационнойБазы
Этот ключ сообщает системе, что запуск производится именно для целей обновления, и БСП старается выполнить процедуры в монопольном режиме, не запуская параллельные фоновые процессы, которые могут вызвать конфликт блокировок.
Если при обновлении вы сталкиваетесь с «неубиваемыми» фоновые заданиями:
УстановитьБлокировкуРегламентныхЗаданий), так как это отключает активность на уровне логики конфигурации./C) для инициализации процесса обновления.