Сеанс 1С 8.3 висит и держит лицензию или блокировку: что с ним делать
Содержание
Чтобы отключить зависший сеанс в 1С:Предприятии 8.3 в клиент-серверном режиме, откройте консоль «Администрирование серверов 1С Предприятия», найдите базу, раскройте узел Сеансы, щёлкните по нужной строке правой кнопкой и выберите «Удалить». Без консоли то же делает команда rac session terminate. В файловом режиме консоли нет: там закрывают процесс 1cv8.exe на компьютере пользователя или открытый файл базы на файловом сервере.
Частое заблуждение — что достаточно перезагрузить компьютер пользователя. Сеанс живёт на сервере 1С, и если сервер не узнал об обрыве связи, сеанс остаётся в списке, держит лицензию и не даёт получить монопольный доступ. Ниже — как найти именно зависший сеанс, удалить его аккуратно и что делать, если он не уходит.
Как понять, что сеанс действительно завис
Не каждый «старый» сеанс завис. Пользователь мог уйти на обед с открытой программой — такой сеанс живой. Удалять его можно, но несохранённые данные пропадут.
Признаки настоящего зависания в списке сеансов консоли:
- 🕒 «Последняя активность» — давно, а пользователь говорит, что 1С у него закрыта.
- 💤 «Спящий» — «Да». Сервер потерял связь с клиентом и перевёл сеанс в спящий режим. Обычно такой сеанс завершается сам по таймауту, но не всегда.
- ⏳ «Время вызова (текущее)» растёт минутами — сервер выполняет вызов и не может его закончить.
- 🔒 «Блокировано СУБД» или «Блокировано упр.» не пусто — сеанс ждёт чужую блокировку. Тогда завис не он, а тот, кто его держит.
- 🖥️ Тот же пользователь заходит повторно и получает второй сеанс, а первый висит рядом.
Если сеансов много, отсортируйте список по колонке «Пользователь» или «Компьютер». Дубли одного человека с разным временем начала сразу видны.
Отключение сеанса через консоль администрирования кластера
Консоль — самый безопасный способ: видно всё, что происходит в базе, и удаляется ровно одна строка.
Пошагово
- Запустите «Администрирование серверов 1С Предприятия» на сервере или на машине администратора.
- Раскройте дерево:
Central 1C:Enterprise 8.3 servers→ имя сервера →Кластеры→ кластер →Информационные базы→ нужная база →Сеансы. - Найдите сеанс по пользователю, компьютеру и приложению (тонкий клиент, конфигуратор, фоновое задание, COM-соединение).
- Правой кнопкой по строке → «Удалить». Подтвердите.
- Обновите список (F5). Если строка пропала — готово.
Если на кластере задан администратор, консоль спросит логин и пароль кластера. Это не пользователь базы и не учётная запись Windows.
Консоль не открывается
Типичная ситуация после обновления платформы: оснастка выдаёт ошибку создания компонента. Помогает перерегистрация radmin.dll той версии платформы, что стоит на сервере. Командная строка от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"
Номер версии подставьте свой — папку можно посмотреть в C:\Program Files\1cv8\. Разрядность консоли и платформы должна совпадать.
Удалённый сеанс не всегда исчезает сразу. Если он был посреди долгого серверного вызова или большой транзакции, сервер сначала дождётся отката в СУБД. Откат объёмной транзакции может идти дольше, чем она выполнялась. Не перезапускайте сервер в этот момент — откат начнётся заново.
rmngr, ras и rac: отключение сеанса из командной строки
Менеджер кластера rmngr — это процесс, который хранит реестр сеансов и распределяет их по рабочим процессам. Своих команд у него нет. Управлять им снаружи можно двумя путями: через консоль (она идёт через агент ragent, порт 1540) или через связку ras + rac.
ras— сервер администрирования, слушает порт 1545 и передаёт команды кластеру.rac— консольный клиент, который подключается кras.
Оба лежат в папке bin платформы на Windows (C:\Program Files\1cv8\<версия>\bin\) и в /opt/1cv8/x86_64/<версия>/ на Linux.
Запуск ras
На Windows для разового использования:
"C:\Program Files\1cv8\8.3.24.1548\bin\ras.exe" cluster --port=1545 localhost:1540
На Linux:
/opt/1cv8/x86_64/8.3.24.1548/ras cluster --daemon
Для постоянной работы ras регистрируют службой — так он переживёт перезагрузку.
Команды для зависшего сеанса
# 1. Узнать идентификатор кластера
rac cluster list
# 2. Посмотреть сеансы кластера (или одной базы через --infobase=<uuid>)
rac session list --cluster=<uuid-кластера>
# 3. Завершить конкретный сеанс
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
Если у кластера есть администратор, добавьте --cluster-user=<логин> --cluster-pwd=<пароль> к каждой команде, кроме cluster list.
В выводе session list каждый сеанс — это блок строк «параметр : значение». Для поиска зависших смотрите user-name, host, app-id, last-active-at, hibernate (спящий) и blocked-by-dbms. Точный список параметров вашей версии показывает rac help session.
Сначала прочитайте вывод session list глазами, и только потом завершайте. Идентификатор сеанса в rac — длинный UUID, а не короткий номер из колонки «Сеанс».
Блокировки и транзакции: кто держит базу
Частый случай: пользователи жалуются, что «всё висит», а в консоли висят десять сеансов. Завис один — тот, кто держит блокировку. Остальные стоят в очереди за ним.
Управляемые блокировки 1С
В консоли у базы есть узел Блокировки. Там видно, какой сеанс заблокировал какой объект: документ, регистр, константу. Сеанс, который держит блокировку дольше всех и сам ничего не ждёт, — кандидат на удаление.
Через rac то же самое:
rac lock list --cluster=<uuid-кластера> --infobase=<uuid-базы>
Блокировки в СУБД
Если в колонке «Блокировано СУБД» стоит номер соединения, ожидание идёт на уровне базы данных. Для MS SQL Server посмотреть цепочку можно так:
SELECT session_id, blocking_session_id, wait_type, wait_time, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
Номер соединения СУБД, которое занимает сеанс 1С, rac показывает в параметре db-proc-info. Так вы сопоставите «виновника» в SQL с конкретным пользователем 1С.
Команда KILL в SQL Server обрывает соединение, но сеанс 1С при этом остаётся и получит ошибку СУБД. Правильный порядок: завершить сеанс 1С через консоль или rac, а к KILL прибегать, только если сеанс 1С уже удалён, а соединение в СУБД всё ещё висит.
Регламентные задания и автоматическая очистка сеансов
Зависшие сеансы часто оставляют не люди, а фоновые задания: обмен, загрузка курсов, полнотекстовый индекс. В списке сеансов у них приложение «Фоновое задание».
Остановить фоновые задания на время работ
В свойствах информационной базы в консоли кластера есть флажок «Блокировка регламентных заданий включена». Пока он стоит, новые регламентные задания не стартуют, и удалённые сеансы не возвращаются. После работ флажок снимите — иначе перестанут работать обмены.
В типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11) список заданий открывается в разделе Администрирование → Обслуживание, группа «Регламентные операции». Там видно, какое задание сейчас выполняется и сколько длится.
Скрипт, который снимает спящие сеансы
Встроенного регламентного задания «удалить зависшие сеансы » в платформе нет. Его делают снаружи: скрипт на rac по расписанию в планировщике Windows или cron. Пример для Linux, который завершает только спящие сеансы:
#!/bin/bash
RAC=/opt/1cv8/x86_64/8.3.24.1548/rac
CL=$($RAC cluster list | awk -F' *: *' '$1=="cluster"{print $2; exit}')
$RAC session list --cluster="$CL" \
| awk -F' *: *' '$1=="session"{s=$2} $1=="hibernate" && $2=="yes"{print s}' \
| while read -r S; do
echo "$(date '+%F %T') завершаю $S"
$RAC session terminate --cluster="$CL" --session="$S"
done
Перед тем как ставить скрипт в расписание, запустите его без строки terminate и проверьте, какие сеансы он находит. Запускать стоит ночью или в обед, когда пользователей мало: удалённый сеанс теряет несохранённые изменения.
Диагностика на уровне операционной системы
Если консоль показывает сеанс, но удалить его не получается, или кластер вообще не отвечает, остаётся уровень процессов.
Найти нужный рабочий процесс
В консоли откройте узел Рабочие процессы кластера. Там видны процессы rphost с номером PID, памятью и числом соединений. В свойствах сеанса указано, каким процессом он обслуживается.
На Windows процесс ищут в диспетчере задач на вкладке «Подробности» по PID. На Linux:
ps -o pid,rss,etime,cmd -C rphost
Завершить rphost
Завершение rphost обрывает все сеансы, которые обслуживает этот процесс, а не один. Пользователи потеряют несохранённые данные. Делайте это, только когда предупредили людей или когда процесс и так не работает.
Кластер сам поднимет новый рабочий процесс взамен убитого. На Linux сначала пробуйте обычный kill <PID>, и только если процесс не отвечает — kill -9.
Перезапуск службы «Агент сервера 1С:Предприятия 8.3» (на Linux — службы srv1cv8 вашей версии) — крайняя мера. Он сбрасывает все сеансы всех баз кластера.
Файловый режим
В файловой базе сервера 1С нет, сеанс живёт в процессе 1cv8.exe на компьютере пользователя. Зависший сеанс — это зависшая программа:
- Найдите компьютер по списку
Администрирование → Обслуживание → Активные пользователиили в конфигураторе через «Активные пользователи». - На этом компьютере завершите процесс 1cv8.exe или 1cv8c.exe в диспетчере задач.
- Если компьютер недоступен, а база лежит в общей папке: на файловом сервере откройте «Управление компьютером» → «Общие папки» → «Открытые файлы», найдите файл
1Cv8.1CDот нужного пользователя и закройте его.
Закрытие открытого файла на сервере — грубый способ. Если в этот момент шла запись, базу стоит проверить через «Тестирование и исправление» в конфигураторе, предварительно сделав копию.
Профилактика: чтобы сеансы не зависали
Зависшие сеансы — симптом. Причина обычно в одном из трёх мест: сеть, память рабочих процессов или долгие транзакции.
| Что настроить | Где | Что даёт |
|---|---|---|
| Интервал перезапуска рабочих процессов | Свойства кластера | rphost периодически перезапускается и не копит утечки памяти |
| Допустимый объём памяти и «Принудительно завершать проблемные процессы» | Свойства кластера | Разросшийся процесс выводится из работы до того, как подвесит всех |
| Блокировка регламентных заданий на время работ | Свойства информационной базы | Фоновые задания не стартуют во время обновления |
| Блокировка начала сеансов с сообщением пользователям | Свойства базы в консоли или Администрирование → Обслуживание в типовой | Пользователи выходят заранее, а не теряют сеанс посреди работы |
| Расписание обменов вне рабочего времени | Список регламентных заданий базы | Меньше конфликтов блокировок днём |
Ещё несколько привычек, которые снижают число зависаний:
- 📶 Пользователи по VPN и Wi-Fi чаще оставляют спящие сеансы. Для удалённых сотрудников лучше терминальный сервер или веб-клиент.
- 🧮 Тяжёлые отчёты за год и групповое перепроведение запускайте вечером. Они держат блокировки и съедают память rphost.
- 🔁 Держите платформу на клиентах и на сервере одной версии. Разные сборки дают ошибки соединения и «мусорные» сеансы.
- 📋 Раз в неделю смотрите список сеансов: если один и тот же пользователь стабильно оставляет спящий сеанс, проблема у него на компьютере или в сети.