Как устранить задвоение регламентных заданий в 1С:Предприятии 8 после сбоя

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

Проблема задвоения выполнения регламентных заданий в 1С — это сложная коллизия, с которой часто сталкиваются администраторы после аварийного завершения работы сервера, сбоев дисковой подсистемы или некорректного восстановления базы данных из бэкапа. Ситуация выглядит следующим образом: в консоли администрирования задание отображается в единственном экземпляре, однако в «Журнале регистрации» или по результатам работы кода видно, что задание запускается дважды (иногда с разницей в минуту, иногда параллельно). Рассмотрим подробно, почему это происходит и как это исправить.

Методика диагностики: выявляем «фантомные» запуски

Прежде чем приступать к радикальным мерам, нам необходимо проанализировать ситуацию и убедиться, что мы имеем дело именно с программным сбоем планировщика, а не с человеческим фактором. Проанализируем «Журнал регистрации». Нам нужно обратить внимание на следующие колонки:

  1. Номер сеанса: если у двух одновременно запущенных заданий разные номера сеансов, это подтверждает дублирование.
  2. Рабочий процесс: посмотрите на ID процесса rphost. Если задания выполняются в разных процессах, это может указывать на наличие «зависших» процессов в памяти сервера.
  3. Компьютер: убедитесь, что задания запускаются именно на рабочем сервере, а не на забытой тестовой копии, где не установлена блокировка регламентных заданий.

Разберем основные способы решения проблемы, начиная от самых простых и заканчивая глубокой очисткой системы.

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

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

Выполним следующие шаги:

  1. Остановим службу 1C:Enterprise 8.3 Server Agent через оснастку services.msc.
  2. Откроем «Диспетчер задач» и убедимся, что все процессы rphost, rmngr и ragent завершены.
  3. Если остались «висячие» процессы, завершим их принудительно. Именно они часто являются причиной «фантомных» запусков, так как продолжают удерживать соединение с БД и выполнять задачи по старому расписанию.
  4. Запустим службу заново.

Решение 2: Очистка серверного кэша и каталога srvinfo

Если простой перезапуск не помог, проанализируем состояние серверного кэша. Сервер 1С хранит служебную информацию о кластере в каталоге srvinfo (по умолчанию это путь C:\Program Files\1cv8\srvinfo). При некорректном восстановлении файлов базы (например, простым копированием файлов БД обратно на диск после сбоя) данные в файлах .lst и папках с GUID баз могут содержать неактуальные сведения о сеансах и заданиях.

Важно: Перед выполнением этих действий создайте резервную копию папки srvinfo!

Рассмотрим порядок действий по очистке:

  1. Остановим службу 1С.
  2. Перейдем в каталог reg_1541 внутри srvinfo.
  3. Найдем папку с уникальным идентификатором нашей информационной базы.
  4. Удалим содержимое папок snacc и другие временные файлы внутри каталога базы.
  5. В некоторых случаях целесообразно очистить весь кэш кластера, но помните, что это приведет к потере списка баз в консоли (их придется добавлять заново) и настроек прав пользователей консоли.

Решение 3: Пересоздание информационной базы в кластере

Рассмотрим ситуацию, когда записи в системных таблицах планировщика внутри SQL-базы конфликтуют с реестром кластера. Поможет метод переподключения базы:

  1. Откроем консоль администрирования серверов 1С.
  2. Удалим информационную базу из списка (выбрав вариант «Оставить информационную базу без изменений», чтобы не удалить саму базу в SQL).
  3. Создадим новую запись информационной базы в консоли, указав те же параметры подключения к SQL-серверу.

Этот метод заставляет менеджер кластера заново прочитать все метаданные и объекты РегламентныеЗадания из таблицы _Config и пересоздать записи в очередях планировщика.

Решение 4: Глубокая очистка через выгрузку в dt

Для баз большого объема (как в примере — 300 Гб) этот метод трудозатратен, но он гарантирует устранение логических несоответствий на уровне таблиц 1С. При выгрузке в файл .dt система не переносит временные таблицы и мусорные записи из очередей заданий. После загрузки в чистую базу данных структура будет максимально «стерильной».

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

Технические нюансы платформы 8.3.11 и выше

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

Для программной проверки уникальности запущенных заданий можно использовать следующий код, который выведет список всех регламентных заданий и их уникальные идентификаторы:


ВыборкаЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого Задание Из ВыборкаЗаданий Цикл
    Сообщить("Задание: " + Задание.Метаданные.Имя + " | ID: " + Задание.УникальныйИдентификатор);
    Сообщить("Состояние: " + Задание.Состояние + " | Использование: " + Задание.Использование);
КонецЦикла;

Если вы видите, что в списке присутствуют дубли одного и того же метаданного с разными УникальныйИдентификатор, которых нет в консоли, значит, в базе данных присутствуют «битые» ссылки, и поможет только программное удаление лишних объектов через метод Задание.Удалить() или выполнение тестирования и исправления ИБ.

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

← На главную