К статье
Практический материал

Администрирование · 11 мин

Как принудительно завершить фоновое задание 1С

Как принудительно завершить зависшее фоновое задание в 1С: через консоль заданий, кластер серверов, код и диспетчер задач. Риски, проверка результата, FAQ.

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

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

Важно понимать разницу между «отменой» и «убийством» процесса. Штатная отмена через метод Отменить() или консоль кластера даёт коду задания шанс корректно завершиться, тогда как завершение процесса операционной системой обрывает выполнение мгновенно и может оставить транзакции незавершёнными. Ниже разобраны все рабочие способы — от мягкого к жёсткому.

Как определить, что задание действительно зависло

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

Откройте консоль заданий (в типовых конфигурациях: «Администрирование» → «Обслуживание» → «Регламентные и фоновые задания») и посмотрите состояние задания и время начала. Если задание висит в состоянии «Выполняется» аномально долго относительно обычного времени его работы — это первый признак проблемы.

Дополнительные признаки зависания: рабочий процесс rphost стабильно потребляет 100% одного ядра процессора или, наоборот, не потребляет ресурсов вообще (ждёт блокировку); в журнале регистрации нет новых событий от задания; пользователи жалуются на блокировки при работе с теми же данными. Проверить ожидание блокировок можно через консоль кластера в разделе «Блокировки» или через технологический журнал.

Состояние «Выполняется» дольше обычногоВозможное зависание

Сравните с типичной длительностью этого задания по журналу регистрации

rphost грузит ядро на 100%Вероятен бесконечный цикл в коде

Проверьте, какой сеанс принадлежит заданию, в консоли кластера

Задание не потребляет ресурсыОжидание блокировки или внешнего ресурса

Посмотрите список блокировок в консоли кластера

Ошибка в журнале регистрацииЗадание могло уже упасть, но не сняться

Проверьте, есть ли живой сеанс у этого задания

Штатная отмена через консоль кластера серверов 1С

Самый контролируемый способ в клиент-серверном варианте — завершить сеанс фонового задания через консоль администрирования кластера. Откройте консоль, найдите нужный кластер и информационную базу, перейдите в раздел «Сеансы». Фоновые задания отображаются там как сеансы с типом «Фоновое задание».

Найдите нужный сеанс по имени задания, времени начала или пользователю, от имени которого оно запущено. Выделите сеанс и выберите «Удалить» — кластер отправит процессу команду завершения. Задание получит исключение и завершится, его состояние сменится на «Ошибка» или «Отменено».

Альтернатива — раздел «Соединения»: можно разорвать соединение рабочего процесса с СУБД, что также приведёт к аварийному завершению задания. Этот способ грубее и применяется, когда удаление сеанса не срабатывает.

Отмена через консоль кластера
  1. 1
    Откройте консоль администрирования серверов 1С и разверните нужный кластер
  2. 2
    Выберите информационную базу и перейдите в раздел «Сеансы»
  3. 3
    Найдите сеанс с типом «Фоновое задание» по имени и времени начала
  4. 4
    Выделите сеанс и нажмите «Удалить», подтвердите действие
  5. 5
    Проверьте в консоли заданий, что состояние сменилось на «Ошибка» или «Отменено»

Программная отмена задания встроенными средствами

Платформа предоставляет методы для управления фоновыми заданиями из кода. Если у вас есть доступ к конфигуратору или внешней обработке с правами администратора, задание можно отменить программно. Метод Отменить() посылает заданию сигнал завершения — выполняемый код прерывается исключением при ближайшей возможности.

bsl
МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно));
Для Каждого Задание Из МассивЗаданий Цикл
    Если Задание.ИмяМетода = "МойОбработчик.ДлительнаяОперация" Тогда
        Задание.Отменить();
    КонецЕсли;
КонецЦикла;

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

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

Завершение рабочего процесса и сеанса на уровне сервера

Когда задание не реагирует на отмену, остаётся завершить процесс, в котором оно исполняется. В клиент-серверной архитектуре задания выполняются в рабочих процессах rphost. Один процесс может обслуживать несколько сеансов, поэтому сначала выясните, какие ещё сеансы на нём работают — их тоже разорвёт.

В консоли кластера откройте раздел «Рабочие процессы», найдите процесс с аномальной нагрузкой и посмотрите связанные с ним сеансы. Если на процессе только зависшее задание, его можно остановить через диспетчер задач Windows (завершить rphost по PID) или командой kill на Linux. Кластер автоматически перезапустит рабочий процесс.

В файловой базе фоновое задание выполняется в потоке клиентского приложения, которое его запустило. Отдельно «убить» задание нельзя — придётся завершить процесс 1cv8.exe целиком, что закроет и само приложение. Поэтому перед запуском тяжёлых фоновых операций в файловом режиме сохраняйте открытую работу.

Что делать с регламентными заданиями, которые перезапускаются

Отдельная ситуация — зависшее регламентное задание. После принудительного завершения оно может тут же запуститься снова по расписанию, и проблема повторится. Поэтому перед завершением или сразу после него отключите задание: в консоли заданий снимите флаг «Использование» у соответствующего регламентного задания.

Если задание запускается слишком часто и не успевает завершаться, настройте интервал перезапуска и свойство «Повторное использование сеансов». В типовых конфигурациях полезно проверить очередь заданий в разделе «Очередь заданий» (для модели сервиса) — там зависшие копии могут накапливаться.

После устранения причины (исправления кода, снятия блокировки, восстановления доступа к внешнему ресурсу) включите задание обратно и проконтролируйте первый запуск вручную.

Маршрут решения

Как выбрать действие

Задание активно, но база клиент-серверная и есть доступ к консоли кластераУдалите сеанс фонового задания в разделе «Сеансы» консоли кластера
Есть доступ к коду или внешней обработке с правами администратораВызовите Отменить() для задания, найденного через ПолучитьФоновыеЗадания()
Задание не реагирует на отмену и держит блокировкиЗавершите рабочий процесс rphost, предварительно проверив другие его сеансы
База файловая, задание запущено из клиентского приложенияСохраните данные и завершите процесс 1cv8.exe, запустивший задание
Задание регламентное и перезапускается после завершенияСнимите флаг «Использование» у регламентного задания до устранения причины

Проверка результата и типичные ошибки

После завершения задания убедитесь, что оно действительно остановлено: в консоли заданий состояние должно смениться с «Выполняется» на «Отменено», «Ошибка» или задание должно исчезнуть из списка активных. В консоли кластера не должно остаться сеанса этого задания, а нагрузка на рабочий процесс — вернуться к норме.

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

Частая ошибка — завершать «подозрительный» сеанс, не убедившись, что это именно нужное задание: по имени и времени легко перепутать похожие сеансы. Другая ошибка — многократный запуск одного и того же задания пользователями, из-за чего копии заданий взаимно блокируют друг друга и каждая выглядит зависшей.

Типичные ошибки
01
Завершение сеанса без проверки — разрывается чужое задание или сеанс пользователя с похожим именем
02
Завершение rphost без просмотра его сеансов — обрываются все соединения процесса, пользователи получают ошибки
03
Многократный ручной запуск одного задания — копии блокируют друг друга и все «висят»
04
Забыли отключить регламентное задание — после завершения оно запускается снова по расписанию
05
Ожидание мгновенной отмены — код внутри запроса к СУБД прервётся только после возврата из запроса
Контрольные точки

Как проверить результат

Состояние задания в консоли заданий
Норма

«Отменено», «Ошибка» или задания нет в активных

Тревожный признак

По-прежнему «Выполняется» спустя несколько минут

Сеанс в консоли кластера
Норма

Сеанс фонового задания отсутствует

Тревожный признак

Сеанс жив, нагрузка на процесс не падает

Нагрузка rphost
Норма

Потребление CPU вернулось к обычному уровню

Тревожный признак

Процесс продолжает грузить ядро

Данные, которые обрабатывало задание
Норма

Нет «половинчатых» записей, повторный запуск проходит штатно

Тревожный признак

Часть документов проведена, часть нет, при повторе — ошибки блокировок

Итог

Что важно запомнить

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

Частые вопросы

Можно ли завершить фоновое задание без прав администратора?

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

Что произойдёт с данными, если задание прервать на середине?

Незавершённая транзакция будет откачена СУБД автоматически — частично записанных в рамках одной транзакции данных не останется. Но если задание фиксировало изменения порциями (несколько транзакций), уже зафиксированная часть сохранится, и её нужно проверить вручную.

Почему после Отменить() задание продолжает висеть?

Отмена — это сигнал, а не мгновенное уничтожение: выполнение прервётся при ближайшей точке выхода из текущей операции. Если код сейчас внутри тяжёлого запроса к СУБД, ждите завершения запроса либо разрывайте соединение с СУБД через консоль кластера.

Как завершить фоновое задание в файловой базе?

Отдельного механизма нет: задание исполняется внутри процесса клиентского приложения. Сохраните открытую работу и завершите процесс 1cv8.exe через диспетчер задач. Приложение закроется вместе с заданием.

Задание зависло из-за блокировки — что делать в первую очередь?

Найдите и устраните источник блокировки, а не само задание: в консоли кластера откройте раздел «Блокировки», определите сеанс, который держит ресурс, и завершите его. После снятия блокировки зависшее задание часто продолжает работу и завершается штатно.

Как не допустить зависания заданий в будущем?

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