Как запретить запуск регламентных заданий на сервере 1С и навести порядок в фоновых процессах
Содержание
Блокировку фоновых заданий в клиент-серверной 1С включают в свойствах информационной базы: откройте консоль администрирования серверов 1С, раскройте Кластер → Информационные базы, вызовите свойства нужной базы и поставьте флаг «Блокировка регламентных заданий включена». После записи менеджер кластера перестаёт запускать регламентные задания этой базы, а пользователи продолжают работать как обычно. Тот же флаг ставится из командной строки утилитой rac — это удобно для скриптов.
Типичная ситуация: администратор развернул копию рабочей базы для тестов, и через час контрагенты получили дубли писем, а в обмен с сайтом ушли тестовые заказы. Копия просто унаследовала расписание рабочей базы. Именно для таких случаев и нужна блокировка, и включать её стоит до первого входа в копию.
Как устроены регламентные и фоновые задания в 1С
Сначала о терминах, потому что от них зависит, что именно вы блокируете.
- 🕒 Регламентное задание — объект метаданных с расписанием: загрузка курсов валют, обмен данными, обновление полнотекстового индекса, отправка почты. Его запускает сама платформа по расписанию.
- ⚙️ Фоновое задание — процесс, который выполняет код на сервере без окна пользователя. Каждое регламентное задание в момент запуска тоже превращается в фоновое. Но фоновые задания запускает и прикладной код: формирование тяжёлого отчёта, закрытие месяца , длительные операции в типовых конфигурациях.
Кто их запускает, зависит от режима работы базы:
| Режим базы | Кто запускает регламентные задания | Чем блокировать |
|---|---|---|
| Клиент-серверный | Менеджер кластера (процесс rmngr), без участия пользователей | Флаг в свойствах базы в кластере или rac |
| Файловый | Клиентский сеанс, открытый в базе | Флага нет: отключают использование отдельных заданий в самой базе |
В клиент-серверном варианте задания работают внутри рабочих процессов rphost и в консоли видны как сеансы с приложением «Фоновое задание». Каждый такой сеанс занимает соединение и память рабочего процесса, поэтому при десятке заданий с минутным расписанием нагрузка заметна даже ночью.
Флаг в кластере запрещает именно регламентные задания. Фоновые задания, которые запускает пользователь из формы (например, длительное формирование отчёта), продолжают работать. Если нужно остановить и их, понадобится блокировка начала сеансов или завершение конкретных сеансов.
Включение блокировки регламентных заданий в консоли кластера
Для изменения свойств базы нужны права администратора кластера (если он задан) и логин с паролем администратора самой информационной базы.
- Запустите «Администрирование серверов 1С Предприятия» на компьютере, где установлены средства администрирования.
- Раскройте дерево:
Центральные серверы 1С:Предприятия 8.3 → <имя сервера> → Кластеры → <кластер> → Информационные базы. - Щёлкните правой кнопкой по нужной базе и выберите
Свойства. - Если кластер защищён, введите логин и пароль администратора кластера, затем — администратора информационной базы.
- Установите флаг «Блокировка регламентных заданий включена».
- Нажмите
ОК, чтобы записать изменения.
Снимается блокировка тем же путём — флаг убирают и снова нажимают ОК.
Что происходит после включения:
- ✅ новые запуски регламентных заданий этой базы прекращаются;
- ✅ остальные базы кластера работают по своим расписаниям;
- ⏳ уже выполняющиеся задания доводятся до конца, флаг их не прерывает;
- 👥 пользователи входят и работают без ограничений.
В том же окне свойств есть соседний блок «Блокировка начала сеансов включена» с периодом, сообщением и кодом разрешения. Их легко перепутать. Блокировка сеансов закрывает вход людям, а блокировка регламентных заданий — только автоматический запуск по расписанию. Перед обновлением конфигурации обычно включают обе.
Если консоль не открывает свойства базы и пишет об ошибке подключения, проверьте, зарегистрирована ли библиотека консоли под ту же версию платформы, что и сервер. Консоль одной версии с сервером другой версии работает нестабильно. Перерегистрация выполняется командой regsvr32 "C:\Program Files\1cv8\<версия>\bin\radmin.dll" от имени администратора.
Блокировка заданий из командной строки через rac
Когда базу копируют по расписанию (например, ночная выгрузка рабочей базы в тестовую), руками ставить флаг неудобно. Консольная утилита rac делает то же самое и встраивается в скрипт. Она работает через сервер администрирования ras, который должен быть запущен на сервере 1С (по умолчанию порт 1545).
Последовательность такая:
- Узнайте идентификатор кластера:
rac cluster list. - Найдите идентификатор базы:
rac infobase --cluster=<uuid_кластера> summary list. - Включите блокировку командой
infobase updateс параметром--scheduled-jobs-deny=on.
Пример bat-файла для Windows:
@echo off
set RAC="C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
set CLUSTER=e3f1b2c4-0000-0000-0000-000000000000
set IB=7a9d5e10-0000-0000-0000-000000000000
rem Включить блокировку регламентных заданий
%RAC% infobase --cluster=%CLUSTER% update --infobase=%IB% ^
--infobase-user="Администратор" --infobase-pwd="пароль" ^
--scheduled-jobs-deny=on
rem Проверить результат: в выводе scheduled-jobs-deny : on
%RAC% infobase --cluster=%CLUSTER% info --infobase=%IB% ^
--infobase-user="Администратор" --infobase-pwd="пароль"
Для снятия блокировки замените on на off. Путь к rac.exe и идентификаторы подставьте свои. Если кластер защищён паролем, добавьте параметры --cluster-user и --cluster-pwd. Полный список параметров команды выводит rac help infobase.
Пароль в открытом виде в bat-файле — плохая идея на общем сервере. Храните скрипт в папке с доступом только для учётной записи, под которой он запускается планировщиком Windows.
Отключение и настройка отдельных заданий в базе
Флаг кластера — грубый инструмент: он выключает всё сразу. Часто нужно иное: оставить загрузку курсов валют, но запретить обмен с сайтом. Это делается внутри базы.
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, ERP) путь такой: Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. В списке видно каждое задание, его расписание, время последнего запуска и результат.
Как выключить одно задание
- Откройте список регламентных заданий по пути выше.
- Двойным щелчком откройте нужное задание.
- Снимите флаг «Включено».
- Нажмите
Записать и закрыть.
Задание остаётся в списке, но платформа его больше не запускает. В файловой базе это единственный штатный способ остановить конкретное задание.
Что настраивают в расписании
| Параметр | Зачем менять |
|---|---|
| Дни недели и месяцы | Перенести тяжёлую операцию на выходные |
| Время начала и окончания | Не пускать задание в рабочие часы |
| Повторять через N секунд | Реже опрашивать почту или внешний сервис |
| Пауза при повторе | Снизить частоту запусков, если задание выполняется долго |
| Завершать после | Прервать задание, если оно не уложилось в окно |
Отдельно у задания задают число повторов и интервал при аварийном завершении. Если обмен падает из-за недоступности внешнего сервиса, два-три повтора с интервалом в несколько минут обычно спасают ночную загрузку без вмешательства администратора.
Обновление полнотекстового индекса и пересчёт итогов лучше развести по времени с ночными обменами. Когда все тяжёлые задания стартуют в 02:00, они конкурируют за диски и блокировки данных, и каждое идёт дольше.
Защита копии базы от работы с внешними ресурсами
Конфигурации на свежих редакциях БСП сами замечают, что база переехала: изменилась строка соединения или имя компьютера. При первом входе в такую копию программа предлагает выбрать, рабочая это база или копия. Если указать, что это копия, задания, работающие с внешними ресурсами (почта, обмены, загрузка с сайтов), остаются заблокированными. Отвечайте на этот вопрос внимательно: ошибочное «это рабочая база» в тестовой копии возвращает все обмены.
Управление заданиями из кода 1С
Программно задания включают и выключают тремя способами — от простого к низкоуровневому.
Флаг «Использование» у регламентного задания
Код выполняется на сервере в привилегированном режиме или под пользователем с правами администратора:
&НаСервере
Процедура ОтключитьРегламентноеЗадание(ИмяЗадания)
Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания[ИмяЗадания]);
Если Задание = Неопределено Тогда
Возврат;
КонецЕсли;
Задание.Использование = Ложь;
Задание.Записать();
КонецПроцедуры
В конфигурациях на БСП напрямую объект лучше не трогать: используйте РегламентныеЗаданияСервер.ИзменитьЗадание, который корректно работает и в модели сервиса.
Ключ фонового задания вместо самодельных блокировок
Чтобы одна длительная операция не запустилась дважды, передайте ключ третьим параметром ФоновыеЗадания.Выполнить:
Параметры = Новый Массив;
Параметры.Добавить(Организация);
ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьОбмен", Параметры, "Обмен_" + Строка(Организация.УникальныйИдентификатор()));
Пока активно задание с таким ключом, повторный запуск с тем же ключом вызовет исключение. Оберните вызов в Попытка … Исключение и покажите пользователю понятное сообщение. Это надёжнее флажков в константах, которые остаются «поднятыми» после аварийного завершения.
Отмена активных фоновых заданий
Отбор = Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно);
Для Каждого Задание Из ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор) Цикл
Если СтрНайти(Задание.ИмяМетода, "ПолнотекстовыйПоиск") > 0 Тогда
Задание.Отменить();
КонецЕсли;
КонецЦикла;
Метод Отменить() посылает запрос на отмену. Задание остановится не мгновенно, а когда платформа сможет его прервать.
Флаг кластера через COM
Флаг «Блокировка регламентных заданий» из прикладного кода через встроенный язык напрямую не меняется: это свойство базы в кластере. Его ставят через COM-объект V83.COMConnector: подключение к агенту (ConnectAgent), аутентификация в кластере, подключение к рабочему процессу, AddAuthentication с учётными данными базы, поиск базы в GetInfoBases(), установка свойства ScheduledJobsDenied = Истина и запись через UpdateInfoBase. Для разовых задач проще вызвать rac из скрипта, как показано выше.
Поиск зависших и заблокированных фоновых заданий
Симптомы обычно такие: обмен не отрабатывает часами, курсы валют не грузятся, в списке заданий статус «Выполняется» висит с прошлой ночи.
Информационные базы → <база> → Сеансы, приложение «Фоновое задание». Посмотрите время начала и последней активности. Если активности нет, завершите сеанс.Как завершить сеанс фонового задания
- В консоли откройте
Информационные базы → <база> → Сеансы. - Отсортируйте по колонке «Приложение» и найдите строки «Фоновое задание».
- Сверьте время начала с временем запуска задания из списка в базе.
- Правой кнопкой —
Удалить, чтобы завершить сеанс.
Завершение сеанса прерывает транзакцию задания. Если это закрытие месяца или загрузка пакета обмена, данные откатятся к состоянию до старта, и задание придётся запускать заново. Пользователей это не затрагивает, но делайте это вне пиковых часов.
Через командную строку то же видно командой rac session --cluster=<uuid> list --infobase=<uuid>: у сеансов фоновых заданий в поле app-id стоит BackgroundJob.
Перезапуск службы агента сервера 1С тоже снимает зависшие задания, но заодно обрывает сеансы всех пользователей всех баз кластера. Это крайняя мера, только в согласованное окно.
Как снизить нагрузку от фоновых заданий на сервер 1С
Когда заданий много, блокировка — временная мера. Постоянное решение — правильно разложить нагрузку.
- 📅 Разнести расписания. Задания с интервалом в минуту (опрос почты, обмен с сайтом) проверьте в первую очередь: многим хватает 5–15 минут.
- 🚫 Выключить ненужное. В типовой базе включены задания для подсистем, которыми вы не пользуетесь. Каждое лишнее задание — лишний сеанс.
- 🖥️ Вынести задания на отдельный рабочий сервер. В кластере из нескольких серверов откройте свойства рабочего сервера, раздел требований назначения функциональности. Для типа объекта «Фоновое задание» задайте «Назначать» на выделенном сервере и «Не назначать» на остальных. Тогда тяжёлые задания не отнимают память у пользовательских процессов.
- 🧮 Ограничить число баз на процесс. Параметры «Количество ИБ на процесс» и «Количество соединений на процесс» задаются в свойствах рабочего сервера. Для баз с тяжёлыми заданиями отдельный рабочий процесс снижает взаимное влияние.
- 📊 Следить за длительностью. Если задание из года в год выполняется всё дольше, проблема обычно в росте данных: устаревшие записи регистров, неочищенный журнал регистрации, давно не пересчитанные итоги.
Чек-лист для копии рабочей базы, который стоит выполнять каждый раз:
Частые вопросы
Блокирует ли флаг кластера фоновые задания, запущенные пользователем?
Можно ли заблокировать регламентные задания в файловой базе?
Нужно ли перезапускать сервер после включения блокировки?
Почему после снятия блокировки задания не запустились сразу?
Как узнать, включена ли блокировка, без консоли?
rac infobase --cluster=<uuid> info --infobase=<uuid> с учётными данными базы и найдите в выводе строку scheduled-jobs-deny.