Зависло фоновое задание 1С: отменить, найти причину и запустить снова

· 9 мин

Содержание

Чтобы перезапустить фоновое задание в 1С 8.3, его сначала отменяют, а потом запускают заново. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) это делается в Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания: на вкладке фоновых заданий отменяете зависшее, на вкладке регламентных выделяете нужное и жмёте «Выполнить сейчас». Если отмена не срабатывает, сеанс задания завершают в консоли администрирования серверов или командой rac session terminate.

Типичная картина: обмен с сайтом или загрузка выписок с утра не прошли, в списке висит задание в состоянии «Активно» с вечера, а новые запуски не начинаются. Кнопки «перезапустить» в платформе нет. Есть отмена, повторный запуск и, на крайний случай, принудительное завершение сеанса. Порядок важен: от мягкого способа к жёсткому.

Сначала диагностика: действительно ли задание зависло

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

У фонового задания четыре состояния — так их показывает и форма списка, и встроенный язык (СостояниеФоновогоЗадания):

СостояниеЧто значитЧто делать
АктивноЗадание выполняетсяПроверить, идёт ли работа
ЗавершеноОтработало без ошибокНичего
Завершено аварийноУпало с ошибкойЧитать текст ошибки, исправлять причину
ОтмененоОтменено вручную или из кодаЗапустить заново, если нужно

Признаки настоящего зависания:

  • 🕒 задание «Активно» заметно дольше обычного: например, обмен всегда шёл 5 минут, а сейчас висит 3 часа;
  • 🔒 в консоли кластера у его сеанса растёт время ожидания блокировок, а время вызова не меняется;
  • 📉 в журнале регистрации нет новых записей от этого задания;
  • 🚫 следующий запуск по расписанию не начинается — платформа не стартует новый экземпляр регламентного задания, пока старый не завершён.

Задание в состоянии «Завершено аварийно» перезапускать бессмысленно, пока не устранена причина. Откройте его и прочитайте текст ошибки: там обычно прямо написано, что сломалось — нет доступа к сайту, неверный пароль, конфликт блокировок.

Перезапуск фонового задания из списка регламентных заданий

Это основной и самый безопасный способ. Он работает и в файловой, и в клиент-серверной базе. Нужны права администратора в самой информационной базе.

Отмена зависшего задания

  1. Откройте Администрирование → Обслуживание.
  2. В группе «Регламентные операции» перейдите по ссылке «Регламентные и фоновые задания».
  3. Перейдите на вкладку фоновых заданий и отфильтруйте список по состоянию «Активно».
  4. Найдите нужное задание по наименованию и времени начала.
  5. Выделите его и нажмите команду отмены в командной панели списка.
  6. Обновите список через 1–2 минуты. Состояние должно смениться на «Отменено».

Отмена срабатывает не мгновенно. Платформа прерывает задание в ближайшей точке, где может это сделать. Если код в этот момент ждёт ответа от внешнего сервиса без таймаута, задание может висеть «Активным» и после отмены. Тогда переходите к консоли кластера.

Повторный запуск

  1. Перейдите на вкладку регламентных заданий.
  2. Выделите задание, которое нужно перезапустить.
  3. Нажмите «Выполнить сейчас».
  4. На вкладке фоновых заданий появится новая строка в состоянии «Активно».

Ручной запуск не ломает расписание: следующий плановый старт произойдёт как обычно. Если задание выключено (снят флажок «Включено»), ручной запуск всё равно возможен, но по расписанию оно работать не будет — проверьте флажок, если ждёте автоматики.

Особенность файловой базы

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

Принудительное завершение в консоли администрирования серверов

Если отмена не помогла, задание завершают на уровне кластера. Фоновое задание выполняется в своём сеансе, и этот сеанс можно удалить, как пользовательский.

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

  1. Запустите «Администрирование серверов 1С Предприятия» на сервере или машине администратора.
  2. Раскройте Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы.
  3. В колонке «Приложение» найдите строки «Фоновое задание».
  4. Сопоставьте время начала сеанса со временем старта зависшего задания.
  5. Через контекстное меню удалите сеанс.
  6. Вернитесь в 1С и запустите задание заново, как описано выше.

Полезная проверка до удаления: в колонках сеанса посмотрите время вызова, время ожидания блокировок и объём занятой памяти. Если блокировки растут, задание ждёт другой сеанс. Тогда найдите виновника — чаще всего это пользователь с долгой проводкой или второе задание, и разбирайтесь с ним, а не только с ожидающим.

Флажок «Блокировка регламентных заданий включена»

Частая причина того, что после перезапуска ничего не стартует по расписанию. Этот флажок стоит в свойствах информационной базы в консоли кластера. Его включают на время обновления или при копировании базы и забывают снять.

Откройте свойства базы в ветке «Информационные базы», снимите флажок и сохраните. Понадобится логин и пароль администратора информационной базы.

На копии рабочей базы (тестовой или учебной) блокировку снимать не стоит. Иначе копия начнёт отправлять обмены, письма и выгрузки от имени рабочей организации.

Перезапуск фонового задания из командной строки через rac и ras

Когда графической консоли нет — Linux-сервер, удалённый доступ только по SSH, нужен скрипт для мониторинга, — используют пару утилит. ras — сервер администрирования, rac — консольный клиент к нему.

Сервер ras по умолчанию слушает порт 1545 и подключается к агенту кластера на порту 1540. На рабочем сервере его обычно ставят службой. Для разового запуска:

ras cluster --daemon

Дальше последовательность такая. Сначала узнайте идентификатор кластера:

rac cluster list

Затем идентификатор базы:

rac infobase summary list --cluster=<id-кластера>

Список сеансов этой базы:

rac session list --cluster=<id-кластера> --infobase=<id-базы>

В выводе ищите сеансы с app-id : BackgroundJob — это фоновые задания. Смотрите поле started-at, чтобы выбрать нужный. Завершение сеанса:

rac session terminate --cluster=<id-кластера> --session=<id-сеанса>

Если у кластера заданы администраторы, к каждой команде добавьте --cluster-user и --cluster-pwd.

Снять блокировку регламентных заданий можно так:

rac infobase update --cluster=<id-кластера> --infobase=<id-базы> --infobase-user=<админ ИБ> --infobase-pwd=<пароль> --scheduled-jobs-deny=off

Состав параметров зависит от версии платформы. Если команда ругается на ключ, сверьтесь со справкой: rac help session или rac help infobase.

На Windows rac.exe и ras.exe лежат в каталоге bin установленной версии платформы, например C:\Program Files\1cv8\8.3.xx.xxxx\bin. Версия rac должна совпадать с версией сервера.

Перезапуск фонового задания программно

Администратору с доступом к Конфигуратору бывает удобнее сделать всё из кода — через внешнюю обработку или консоль кода. Код выполняется на сервере с правами администратора.

Отмена всех активных заданий по имени метода:

Отбор = Новый Структура;
Отбор.Вставить("ИмяМетода", "МодульСервер.ИмяПроцедуры");
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);

Задания = ФоновыеЗадания.ПолучитьФоновые(Отбор);
Для Каждого Задание Из Задания Цикл
    Задание.Отменить();
КонецЦикла;

Повторный запуск регламентного задания вне расписания:

Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ИмяЗадания);
Найденные = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);

Для Каждого РегЗадание Из Найденные Цикл
    ФоновыеЗадания.Выполнить(
        РегЗадание.Метаданные.ИмяМетода,
        РегЗадание.Параметры,
        ,
        РегЗадание.Наименование);
КонецЦикла;

МодульСервер.ИмяПроцедуры и ИмяЗадания замените на свои — их видно в Конфигураторе в свойствах регламентного задания.

Ключ задания в примере намеренно не передан. Если передать ключ, а активное задание с таким же ключом уже есть, платформа выдаст ошибку и второй экземпляр не запустит. Этим удобно пользоваться, когда двойной запуск опасен.

Журнал регистрации: почему фоновое задание зависло

Перезапуск снимает симптом. Если не найти причину, завтра задание зависнет снова.

Откройте Администрирование → Обслуживание → Журнал регистрации и поставьте отбор:

  • 📅 период — от момента старта задания до текущего времени;
  • 🏷️ событие — все, что начинаются на «Фоновое задание»: запуск, успешное завершение, ошибка выполнения, отмена;
  • 📌 приложение — «Фоновое задание».

По записям видно, когда задание стартовало, на каком шаге остановилось и с какой ошибкой. Последняя запись перед паузой — подсказка, где искать.

Когда журнала мало, включают технологический журнал через файл logcfg.xml в каталоге conf платформы. Для фоновых заданий полезны события:

  • EXCP — исключения;
  • TLOCK, TTIMEOUT, TDEADLOCK — управляемые блокировки, таймауты и взаимоблокировки;
  • CALL — длительность серверных вызовов.

Технологический журнал быстро растёт. Включайте его на час-два и с отбором по нужной базе, потом отключайте.

Диагностика: выберите симптом

Если ничего не помогло: перезапуск рабочего процесса и службы

Бывает, что сеанс задания не удаляется даже из консоли или в кластере зависли сразу несколько процессов. Остаются жёсткие меры.

СпособКогда применятьПоследствия
Отмена из списка заданийВсегда первымЗатрагивает только задание
Удаление сеанса в консоли или racОтмена не сработалаОткат транзакции задания
Завершение рабочего процесса rphostСеанс не удаляется, процесс зависОбрыв всех сеансов в этом процессе
Перезапуск службы агента сервера 1СКластер не отвечаетОбрыв всех сеансов всех баз сервера

Завершение rphost и перезапуск службы «Агент сервера 1С:Предприятия 8.3» отключат всех пользователей, работающих через этот сервер. Несохранённые документы пропадут. Делайте это вне рабочего времени или предупредите пользователей заранее, хотя бы за 10–15 минут.

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

Профилактика: чтобы фоновые задания не зависали

Большинство зависаний повторяется по одному сценарию. Несколько настроек снимают проблему заранее.

  • ⏱️ Таймауты во внешних вызовах. Для HTTPСоединение, FTP и почтовых соединений задавайте таймаут явно. Без него задание может ждать ответа сайта бесконечно.
  • 🔁 Повторы при сбое. В Конфигураторе в свойствах регламентного задания есть «Количество повторов при аварийном завершении» и «Интервал повтора при аварийном завершении». Задание с сетевыми операциями лучше настроить на 2–3 повтора с интервалом в несколько минут.
  • 🌙 Разнесите тяжёлые задания. Не ставьте полнотекстовый индекс, обмен и пересчёт итогов на одно время. Сдвиг хотя бы на 15–30 минут снижает конфликты блокировок.
  • 📦 Короткие транзакции. Если задание обрабатывает тысячи документов в одной транзакции, оно держит блокировки долго. Порции по 100–500 объектов работают стабильнее.
  • 🔑 Ключ задания. При запуске из кода передавайте ключ, чтобы не получить два параллельных экземпляра.
  • 🖥️ Память сервера. Следите за объёмом памяти рабочих процессов. Задание, упирающееся в память, тормозит и падает.
Проверка после перезапуска
Выполнено: 0 / 6

Частые вопросы о перезапуске фоновых заданий

Можно ли перезапустить фоновое задание без прав администратора?
Нет. Список регламентных и фоновых заданий доступен только пользователям с полными правами или ролью администратора системы. Консоль кластера требует ещё и прав администратора кластера, если они заданы.
Чем фоновое задание отличается от регламентного?
Регламентное задание — это описание: что запускать и по какому расписанию. Фоновое — конкретный запуск, который выполняется сейчас или уже выполнился. Отменяют фоновое, а перезапускают через регламентное.
Потеряются ли данные, если отменить задание посреди работы?
Изменения текущей незавершённой транзакции откатятся. То, что задание успело записать в уже закрытых транзакциях, останется. Поэтому после отмены обмена его повторный запуск безопасен: недостающее догрузится.
Нужно ли перезагружать сервер после зависания задания?
Обычно нет. Хватает отмены или удаления сеанса. Перезагрузка сервера целиком — крайняя мера, когда не отвечает сама служба агента.