Администрирование · 11 мин
Как принудительно завершить фоновое задание 1С
Как принудительно завершить зависшее фоновое задание в 1С: через консоль заданий, кластер серверов, код и диспетчер задач. Риски, проверка результата, FAQ.
Фоновое задание в 1С может «зависнуть» по разным причинам: бесконечный цикл в коде, ожидание блокировки данных, тяжёлый запрос к базе или обмен, который не может завершиться из-за недоступности внешнего ресурса. Пока задание выполняется, оно держит сеанс, потребляет ресурсы сервера и может блокировать работу пользователей, поэтому простое ожидание не всегда приемлемо.
Способ принудительного завершения зависит от режима работы базы. В файловой базе фоновое задание выполняется внутри процесса клиентского приложения, и остановить его можно только завершением этого процесса. В клиент-серверном варианте задание исполняется рабочим процессом кластера 1С, и у администратора есть несколько управляемых способов: консоль кластера, программный отрыв сеанса и встроенные средства платформы.
Важно понимать разницу между «отменой» и «убийством» процесса. Штатная отмена через метод Отменить() или консоль кластера даёт коду задания шанс корректно завершиться, тогда как завершение процесса операционной системой обрывает выполнение мгновенно и может оставить транзакции незавершёнными. Ниже разобраны все рабочие способы — от мягкого к жёсткому.
Как определить, что задание действительно зависло
Прежде чем завершать задание принудительно, убедитесь, что оно не выполняет длительную, но легитимную операцию. Закрытие месяца, пересчёт итогов или загрузка большого пакета данных могут идти десятки минут, и их обрыв создаст больше проблем, чем ожидание.
Откройте консоль заданий (в типовых конфигурациях: «Администрирование» → «Обслуживание» → «Регламентные и фоновые задания») и посмотрите состояние задания и время начала. Если задание висит в состоянии «Выполняется» аномально долго относительно обычного времени его работы — это первый признак проблемы.
Дополнительные признаки зависания: рабочий процесс rphost стабильно потребляет 100% одного ядра процессора или, наоборот, не потребляет ресурсов вообще (ждёт блокировку); в журнале регистрации нет новых событий от задания; пользователи жалуются на блокировки при работе с теми же данными. Проверить ожидание блокировок можно через консоль кластера в разделе «Блокировки» или через технологический журнал.
Сравните с типичной длительностью этого задания по журналу регистрации
Проверьте, какой сеанс принадлежит заданию, в консоли кластера
Посмотрите список блокировок в консоли кластера
Проверьте, есть ли живой сеанс у этого задания
Штатная отмена через консоль кластера серверов 1С
Самый контролируемый способ в клиент-серверном варианте — завершить сеанс фонового задания через консоль администрирования кластера. Откройте консоль, найдите нужный кластер и информационную базу, перейдите в раздел «Сеансы». Фоновые задания отображаются там как сеансы с типом «Фоновое задание».
Найдите нужный сеанс по имени задания, времени начала или пользователю, от имени которого оно запущено. Выделите сеанс и выберите «Удалить» — кластер отправит процессу команду завершения. Задание получит исключение и завершится, его состояние сменится на «Ошибка» или «Отменено».
Альтернатива — раздел «Соединения»: можно разорвать соединение рабочего процесса с СУБД, что также приведёт к аварийному завершению задания. Этот способ грубее и применяется, когда удаление сеанса не срабатывает.
- 1Откройте консоль администрирования серверов 1С и разверните нужный кластер
- 2Выберите информационную базу и перейдите в раздел «Сеансы»
- 3Найдите сеанс с типом «Фоновое задание» по имени и времени начала
- 4Выделите сеанс и нажмите «Удалить», подтвердите действие
- 5Проверьте в консоли заданий, что состояние сменилось на «Ошибка» или «Отменено»
Программная отмена задания встроенными средствами
Платформа предоставляет методы для управления фоновыми заданиями из кода. Если у вас есть доступ к конфигуратору или внешней обработке с правами администратора, задание можно отменить программно. Метод Отменить() посылает заданию сигнал завершения — выполняемый код прерывается исключением при ближайшей возможности.
МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно));
Для Каждого Задание Из МассивЗаданий Цикл
Если Задание.ИмяМетода = "МойОбработчик.ДлительнаяОперация" Тогда
Задание.Отменить();
КонецЕсли;
КонецЦикла;Можно отбирать задания по уникальному идентификатору, имени метода, ключу или состоянию. Метод ОжидатьЗавершения() позволяет дождаться фактического завершения после отмены. Для длительных операций, запущенных через БСП (ДлительныеОперации), есть своя процедура ДлительныеОперации.ОтменитьВыполнениеЗадания(), которая корректно работает с механизмом длительных операций.
Важное ограничение: отмена срабатывает не мгновенно. Если код задания находится внутри длинного запроса к СУБД, прерывание произойдёт только после возврата управления из запроса. Запрос к базе при этом продолжит выполняться на стороне СУБД до своего завершения, если не разорвать соединение.
Завершение рабочего процесса и сеанса на уровне сервера
Когда задание не реагирует на отмену, остаётся завершить процесс, в котором оно исполняется. В клиент-серверной архитектуре задания выполняются в рабочих процессах rphost. Один процесс может обслуживать несколько сеансов, поэтому сначала выясните, какие ещё сеансы на нём работают — их тоже разорвёт.
В консоли кластера откройте раздел «Рабочие процессы», найдите процесс с аномальной нагрузкой и посмотрите связанные с ним сеансы. Если на процессе только зависшее задание, его можно остановить через диспетчер задач Windows (завершить rphost по PID) или командой kill на Linux. Кластер автоматически перезапустит рабочий процесс.
В файловой базе фоновое задание выполняется в потоке клиентского приложения, которое его запустило. Отдельно «убить» задание нельзя — придётся завершить процесс 1cv8.exe целиком, что закроет и само приложение. Поэтому перед запуском тяжёлых фоновых операций в файловом режиме сохраняйте открытую работу.
Что делать с регламентными заданиями, которые перезапускаются
Отдельная ситуация — зависшее регламентное задание. После принудительного завершения оно может тут же запуститься снова по расписанию, и проблема повторится. Поэтому перед завершением или сразу после него отключите задание: в консоли заданий снимите флаг «Использование» у соответствующего регламентного задания.
Если задание запускается слишком часто и не успевает завершаться, настройте интервал перезапуска и свойство «Повторное использование сеансов». В типовых конфигурациях полезно проверить очередь заданий в разделе «Очередь заданий» (для модели сервиса) — там зависшие копии могут накапливаться.
После устранения причины (исправления кода, снятия блокировки, восстановления доступа к внешнему ресурсу) включите задание обратно и проконтролируйте первый запуск вручную.
Как выбрать действие
Проверка результата и типичные ошибки
После завершения задания убедитесь, что оно действительно остановлено: в консоли заданий состояние должно смениться с «Выполняется» на «Отменено», «Ошибка» или задание должно исчезнуть из списка активных. В консоли кластера не должно остаться сеанса этого задания, а нагрузка на рабочий процесс — вернуться к норме.
Проверьте целостность данных, с которыми работало задание. Если оно прервано в середине транзакции, СУБД откатит незавершённую транзакцию автоматически, но если задание писало данные порциями с фиксацией, часть изменений могла сохраниться. Сверьте результат по журналу регистрации и, при необходимости, повторите операцию с начала.
Частая ошибка — завершать «подозрительный» сеанс, не убедившись, что это именно нужное задание: по имени и времени легко перепутать похожие сеансы. Другая ошибка — многократный запуск одного и того же задания пользователями, из-за чего копии заданий взаимно блокируют друг друга и каждая выглядит зависшей.
Как проверить результат
«Отменено», «Ошибка» или задания нет в активных
По-прежнему «Выполняется» спустя несколько минут
Сеанс фонового задания отсутствует
Сеанс жив, нагрузка на процесс не падает
Потребление CPU вернулось к обычному уровню
Процесс продолжает грузить ядро
Нет «половинчатых» записей, повторный запуск проходит штатно
Часть документов проведена, часть нет, при повторе — ошибки блокировок
Что важно запомнить
Действуйте от мягкого к жёсткому: сначала штатная отмена через консоль кластера или метод Отменить(), затем завершение рабочего процесса, и только в файловой базе — завершение клиентского приложения. Регламентное задание предварительно отключите, а после завершения проверьте состояние задания, сеансы и целостность данных.
Частые вопросы
Можно ли завершить фоновое задание без прав администратора?
Нет. Удаление сеансов в консоли кластера и программная отмена чужих заданий требуют административных прав на кластер или в информационной базе. Обычный пользователь может только дождаться завершения или обратиться к администратору.
Что произойдёт с данными, если задание прервать на середине?
Незавершённая транзакция будет откачена СУБД автоматически — частично записанных в рамках одной транзакции данных не останется. Но если задание фиксировало изменения порциями (несколько транзакций), уже зафиксированная часть сохранится, и её нужно проверить вручную.
Почему после Отменить() задание продолжает висеть?
Отмена — это сигнал, а не мгновенное уничтожение: выполнение прервётся при ближайшей точке выхода из текущей операции. Если код сейчас внутри тяжёлого запроса к СУБД, ждите завершения запроса либо разрывайте соединение с СУБД через консоль кластера.
Как завершить фоновое задание в файловой базе?
Отдельного механизма нет: задание исполняется внутри процесса клиентского приложения. Сохраните открытую работу и завершите процесс 1cv8.exe через диспетчер задач. Приложение закроется вместе с заданием.
Задание зависло из-за блокировки — что делать в первую очередь?
Найдите и устраните источник блокировки, а не само задание: в консоли кластера откройте раздел «Блокировки», определите сеанс, который держит ресурс, и завершите его. После снятия блокировки зависшее задание часто продолжает работу и завершается штатно.
Как не допустить зависания заданий в будущем?
Добавляйте в длительные циклы проверку отмены и контрольные точки, избегайте ожидания внешних ресурсов без таймаута, настройте разумное расписание регламентных заданий и следите, чтобы одно и то же задание не запускалось параллельно в нескольких копиях.