Зависший сеанс держит базу: как найти и завершить его в 1С:Предприятии 8.3

· 11 мин

Содержание

Зависший сеанс в клиент-серверной 1С снимают в консоли кластера: Администрирование серверов 1С Предприятия → Кластер → Информационные базы → ваша база → Сеансы, правый щелчок по строке → Удалить. Если консоли под рукой нет, тот же результат даёт обработка «Активные пользователи» в самой базе или команда rac session terminate из командной строки. В файловой базе сеансов на сервере нет: там завершают процесс 1cv8c.exe или закрывают открытый файл 1Cv8.1CD на общей папке.

Откуда берутся зависшие сеансы и чем они мешают

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

Типичные причины:

  • 🔌 обрыв сети или сна ноутбука — тонкий клиент пропал, а сервер ещё держит сеанс;
  • 💥 клиент упал или его «убили» через Диспетчер задач;
  • 🖥️ пользователь отключился от терминального сервера, не выйдя из 1С;
  • ⏳ долгая операция (закрытие месяца , обмен) зависла внутри транзакции;
  • ⚙️ фоновое задание ушло в бесконечный цикл или ждёт внешний ресурс.

Чем это грозит на практике:

СимптомЧто происходит
Не обнаружено свободной лицензииВисящий сеанс продолжает занимать клиентскую лицензию
Конфликт блокировок при выполнении транзакцииСеанс держит блокировку данных, другие ждут и падают по таймауту
Не стартует обновление конфигурацииМонопольный доступ невозможен, пока в базе есть чужие сеансы
Пользователь не может зайти под своим именемЕсли в базе запрещён повторный вход под тем же пользователем

Отдельно о «спящих» сеансах. Если связь с тонким клиентом пропала, сервер не убивает сеанс мгновенно, а переводит его в спящий режим: вдруг клиент вернётся через минуту. В списке сеансов у такого сеанса стоит признак «Спящий» (в rac — поле hibernate: yes). Удалять его можно без опаски — пользователь уже отключён.

Способ 1. Обработка «Активные пользователи» прямо из базы

Самый безопасный путь для конфигураций на БСП: БП 3.0, ЗУП 3.1, УТ 11, КА 2, ERP. Консоль кластера не нужна, достаточно прав администратора в базе.

  1. Откройте базу под пользователем с полными правами.
  2. Найдите обработку «Активные пользователи»: в БП 3.0 и ЗУП 3.1 — раздел Администрирование → Обслуживание. Если быстрее, вызовите её через Главное меню → Все функции → Обработки → Активные пользователи.
  3. В списке видно, кто работает, с какого компьютера, в каком приложении и с какого времени.
  4. Выделите зависшую строку и выполните команду завершения сеанса на командной панели формы.

В клиент-серверном варианте программа при первом завершении спросит параметры администрирования: имя и пароль администратора кластера (если он задан) и администратора базы. Без них сервер не даст закрыть чужой сеанс.

Пункт Все функции по умолчанию скрыт. Включите его: Главное меню → Сервис и настройки → Параметры → Отображать команду «Все функции».

Когда способ не сработает: база вообще не открывается, лицензий не хватает уже вам самим, или сеанс принадлежит фоновому заданию, которое висит внутри транзакции. Тогда переходите к консоли.

Способ 2. Консоль администрирования серверов 1С

Консоль кластера — основной инструмент администратора. Она ставится вместе с сервером 1С или отдельно, если при установке платформы отметить компонент «Администрирование сервера 1С:Предприятия».

Подключение

  1. Запустите «Администрирование серверов 1С Предприятия».
  2. Если центрального сервера нет в дереве — правой кнопкой по Central 1C:Enterprise 8.3 servers → Создать → Центральный сервер 1С:Предприятия 8.3, укажите имя сервера и порт агента 1540.
  3. Раскройте Кластеры → ваш кластер. Если задан администратор кластера, консоль спросит логин и пароль.

Консоль не открывается с ошибкой про класс или COM-объект? Перерегистрируйте библиотеку той же версии, что и сервер: regsvr32 "C:\Program Files\1cv8\8.3.24.1691\bin\radmin.dll" (запуск от имени администратора, номер версии подставьте свой). После обновления платформы это самая частая причина «пустой» консоли.

Удаление сеанса

  1. Раскройте Информационные базы → нужная база → Сеансы.
  2. Отсортируйте список по колонке «Последняя активность» или найдите сеанс по имени пользователя и компьютеру.
  3. Правый щелчок по сеансу → Удалить.

Пользователь получит сообщение, что сеанс завершён администратором. Лицензия освобождается сразу.

На что смотреть перед удалением

Колонка / признакКак читать
Приложение «Тонкий клиент», «Веб-клиент»Обычная интерактивная работа, удалять можно
«Фоновое задание»Это регламент или длительная операция. Удаление прервёт её, транзакция откатится
«Конфигуратор»Кто-то правит конфигурацию. Сначала выясните кто
«Спящий» = ДаКлиент уже отключён, удаление безопасно
Последняя активность — часы назадПочти наверняка «висяк»

Если сеанс держит блокировки, загляните в соседний узел Блокировки у той же базы: там видно, какой сеанс и какие объекты держит. Это помогает понять, кого именно нужно снять, а не удалять всех подряд.

Удаление сеанса фонового задания посреди закрытия месяца или обмена откатит всю незафиксированную транзакцию. Операцию придётся запустить заново.

Способ 3. Командная строка: rac для клиент-серверной базы

rac — консольная утилита администрирования, она лежит в папке bin платформы. Работает через службу сервера администрирования ras (порт по умолчанию 1545), поэтому ras должен быть запущен на сервере 1С.

Пошагово:

cd "C:\Program Files\1cv8\8.3.24.1691\bin"

rem 1. Узнать идентификатор кластера
rac.exe localhost:1545 cluster list

rem 2. Список баз кластера (нужен UUID базы)
rac.exe localhost:1545 infobase summary list --cluster=<UUID_кластера>

rem 3. Сеансы конкретной базы
rac.exe localhost:1545 session list --cluster=<UUID_кластера> --infobase=<UUID_базы>

rem 4. Завершить один сеанс
rac.exe localhost:1545 session terminate --cluster=<UUID_кластера> --session=<UUID_сеанса>

Если у кластера есть администратор, к командам добавляются --cluster-user=<имя> --cluster-pwd=<пароль>.

В выводе session list каждый сеанс — отдельный блок полей. Для поиска «висяков» полезны user-name, host, app-id, last-active-at и hibernate. Остальные ключи и параметры смотрите в rac help session.

Если rac отвечает, что не может подключиться, проверьте службу ras. Её можно зарегистрировать как службу Windows через sc create с запуском ras.exe cluster --service и портом агента.

Способ 4. Файловая база: процессы и открытые файлы

В файловой базе нет кластера и нет списка сеансов на сервере. «Зависший сеанс» здесь — это живой процесс 1С на чьём-то компьютере или незакрытый дескриптор файла 1Cv8.1CD на общей папке.

Терминальный сервер или один компьютер

Найдите процессы 1С нужного пользователя и завершите их:

rem Показать все процессы тонкого и толстого клиента
tasklist /FI "IMAGENAME eq 1cv8c.exe"
tasklist /FI "IMAGENAME eq 1cv8.exe"

rem Завершить клиент конкретного пользователя
taskkill /F /IM 1cv8c.exe /FI "USERNAME eq buh2"

Пользователь потеряет несохранённые изменения в открытых формах. Сама база при этом не повреждается, если процесс не был посреди записи.

База лежит в сетевой папке

Если пользователь ушёл, а его ПК держит файл, закройте дескриптор на файловом сервере. В графическом виде: Управление компьютером → Общие папки → Открытые файлы, найдите 1Cv8.1CD и закройте его. То же из PowerShell:

Get-SmbOpenFile | Where-Object Path -like '*1Cv8.1CD' |
    Select-Object ClientComputerName, ClientUserName, Path

# Закрыть все открытые дескрипторы файла базы
Get-SmbOpenFile | Where-Object Path -like '*1Cv8.1CD' | Close-SmbOpenFile -Force

Файл блокировки

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

Удаляйте 1Cv8.1CL только когда в базе гарантированно никого нет. Удаление при живых подключениях обрывает их работу и рискует целостностью данных.

Способ 5. Автоматизация: PowerShell и Планировщик заданий

Если «висяки» появляются каждую ночь, проще поручить их уборку скрипту. Схема простая: rac выдаёт список, PowerShell фильтрует спящие и давно неактивные сеансы, не трогает фоновые задания и Конфигуратор, остальное завершает.

# clean-1c-sessions.ps1
$rac      = "C:\Program Files\1cv8\8.3.24.1691\bin\rac.exe"
$ras      = "localhost:1545"
$auth     = @()   # если есть админ кластера: @("--cluster-user=admin", "--cluster-pwd=пароль")
$idleHours = 4
$skipApps = @("BackgroundJob", "Designer", "SrvrConsole")
$log      = "C:\Scripts\1c-sessions.log"

$clusterLine = & $rac $ras cluster list | Select-String '^cluster\s*:' | Select-Object -First 1
$cluster = $clusterLine.ToString().Split(':', 2)[1].Trim()

$raw = (& $rac $ras session list "--cluster=$cluster" @auth) -join "`n"
$blocks = $raw -split "`n\s*`n"

foreach ($block in $blocks) {
    $s = @{}
    foreach ($line in $block -split "`n") {
        if ($line -match '^\s*([\w-]+)\s*:\s*(.*)$') { $s[$Matches[1]] = $Matches[2].Trim() }
    }
    if (-not $s['session']) { continue }
    if ($skipApps -contains $s['app-id']) { continue }

    $idle = (Get-Date) - [datetime]::Parse($s['last-active-at'])
    if ($s['hibernate'] -eq 'yes' -or $idle.TotalHours -ge $idleHours) {
        & $rac $ras session terminate "--cluster=$cluster" "--session=$($s['session'])" @auth
        "$(Get-Date -Format s) снят сеанс $($s['user-name']) с $($s['host']), простой $([int]$idle.TotalMinutes) мин" |
            Add-Content $log
    }
}

Скрипт обходит все базы кластера. Чтобы ограничить одну базу, добавьте к session list параметр --infobase=<UUID_базы>.

Запуск по расписанию, каждый день в 02:00 от имени системы:

schtasks /Create /TN "1C clean sessions" /SC DAILY /ST 02:00 /RU SYSTEM ^
  /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\Scripts\clean-1c-sessions.ps1"

Сначала прогоните скрипт с закомментированной строкой session terminate, только с записью в лог. Неделя такого «сухого» режима покажет, кого он снимал бы и не попадают ли под фильтр нужные сеансы.

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

Если сеанс не удаляется вообще

Бывает, что сеанс после удаления возвращается или консоль отвечает ошибкой. Последний шаг — перезапуск службы «Агент сервера 1С:Предприятия 8.3».

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

Если и после перезапуска сеанс «висит» в списке, администраторы чистят сеансовые данные кластера: при остановленной службе удаляют папки snccntx* в каталоге srvinfo\reg_1541. Это сбрасывает кэш сеансов, сами базы не затрагиваются. Перед этим скопируйте каталог reg_1541 целиком в резерв — в нём же лежат настройки кластера.

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

Если «висяки» появляются раз в месяц — это случайность. Если каждый день — у них есть причина, и её стоит найти.

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

Инструменты для разбора:

  • 📜 Журнал регистрации базы — кто и что делал перед зависанием. Фильтруйте по пользователю и времени последней активности сеанса.
  • 🔍 Технологический журнал — включается файлом logcfg.xml в каталоге conf платформы. Показывает долгие вызовы, ожидания на блокировках, взаимоблокировки.
  • 🪟 Журнал событий Windows на сервере 1С — падения rphost и ragent.
  • 📈 Счётчики производительности — память и загрузка процессора рабочими процессами в моменты зависаний.

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

Профилактика: как сделать, чтобы сеансы не копились

Удалять «висяки» вручную каждое утро — признак того, что что-то не настроено. Что помогает на практике:

  1. Таймауты в свойствах базы. Время засыпания пассивного сеанса и время завершения спящего — минимальная настройка, которую стоит сделать на любом сервере.
  2. Политики терминального сервера. Отключённый RDP-сеанс завершается автоматически через заданное время, и 1С закрывается вместе с ним.
  3. Корректное обновление. Перед обновлением конфигурации установите блокировку: Администрирование → Обслуживание → Блокировка работы пользователей. Программа сама предупредит пользователей и завершит их сеансы к назначенному времени.
  4. Регламенты ночью. Тяжёлые фоновые задания (обмены, пересчёт итогов) ставьте на нерабочее время и следите, чтобы они не пересекались.
  5. Одна версия платформы. Клиенты и сервер на одной сборке реже теряют связь и дают меньше «полуживых» сеансов.
  6. Лог скрипта уборки. Раз в неделю смотрите, кого снимал скрипт. Если это всё время один пользователь или один компьютер — разбирайтесь с ним, а не с симптомом.

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

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /N"Администратор" /P"пароль" /C"ЗавершитьРаботуПользователей"

Он устанавливает блокировку и завершает сеансы. Снять блокировку потом можно запуском с параметром /C"РазрешитьРаботуПользователей". Если блокировка задана с кодом разрешения, войти в заблокированную базу можно с ключом /UC<код>.

Перед удалением чужого сеанса
Выполнено: 0 / 5

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

Теряются ли данные при удалении сеанса?
Записанные документы остаются. Пропадает только то, что пользователь не успел сохранить, а незавершённая транзакция откатывается целиком.
Почему после удаления сеанс снова появляется в списке?
Чаще всего клиент жив и переподключается сам. Закройте процесс 1С на компьютере пользователя или в его терминальной сессии, затем удалите сеанс ещё раз.
Можно ли снять сеанс без пароля администратора кластера?
Нет, если администратор кластера задан. Без его логина и пароля ни консоль, ни rac, ни обработка «Активные пользователи» не завершат чужой сеанс.
Освобождается ли лицензия сразу?
Да, сразу после удаления сеанса. Если ошибка о нехватке лицензий не уходит, проверьте список сеансов с ключом --licenses: возможно, лицензии держат другие сеансы.
Чем отличается удаление сеанса от разрыва соединения?
Соединение — это канал связи клиента с рабочим процессом. Разрыв соединения оставляет сеанс жить, и он может перейти в спящий. Удаление сеанса закрывает работу пользователя полностью.