Пассивные и спящие сеансы на сервере 1С: откуда берутся и что с ними делать
Содержание
Пассивный сеанс в 1С — это сеанс, который ещё живёт на сервере, но у которого нет соединения с клиентом. Пользователь закрыл ноутбук, пропала сеть или упал процесс 1cv8c.exe, а сервер ещё не знает, вернётся клиент или нет. Через заданное время такой сеанс засыпает, а спящий сеанс сервер завершает сам.
Тема касается клиент-серверного варианта платформы 8.3: сеансами там управляет кластер серверов . В файловой базе кластера нет, и пассивных сеансов в этом смысле не бывает. Ниже — как отличить пассивный сеанс от рабочего, когда его можно спокойно закрыть и как настроить, чтобы такие сеансы не копились.
Пассивный, активный и спящий сеанс: в чём разница
Сеанс и соединение в 1С — разные вещи. Сеанс хранит состояние работы пользователя: кто вошёл, какие параметры сеанса установлены, какие объекты он заблокировал. Соединение — это канал, по которому клиент общается с рабочим процессом сервера.
Пока канал есть, сеанс считается активным, даже если пользователь просто держит окно открытым и пьёт кофе. Как только канал рвётся, а сеанс остаётся, он становится пассивным.
| Состояние | Есть соединение с клиентом | Что видно в консоли кластера | Что происходит дальше |
|---|---|---|---|
| ✅ Активный | Да | В колонке «Соединение» есть номер | Работает, пока пользователь не выйдет |
| ⏸️ Пассивный | Нет | Колонка «Соединение» пустая, «Спящий» — нет | Через таймаут засыпает или клиент подключается снова |
| 💤 Спящий | Нет | «Спящий» — да | Ждёт возвращения клиента, по таймауту завершается |
Зачем платформе этот промежуточный этап? Чтобы короткий обрыв сети не выбрасывал пользователя из программы. Если клиент восстановил связь, пока сеанс жив, пользователь продолжает работу с того же места: открытые формы и несохранённые данные не пропадают.
Если бы сервер сразу убивал сеанс при каждом обрыве, то любое переподключение Wi-Fi или смена точки доступа в офисе стоила бы людям потерянного ввода.
Где видны таймауты
Для каждого сеанса платформа хранит два значения: через сколько секунд пассивный сеанс засыпает и через сколько секунд спящий сеанс завершается. Их видно в подробном выводе rac session info — в полях passive-session-hibernate-time и hibernate-session-terminate-time. Типичные значения — 1200 секунд (20 минут) до засыпания и 86400 секунд (сутки) до завершения.
Отсюда и главный вывод: при настройках по умолчанию брошенный сеанс может висеть на сервере больше суток.
Откуда берутся пассивные сеансы
Причина всегда одна — клиент перестал быть на связи, не попрощавшись с сервером. А вот поводов много:
- 🔌 Обрыв сети. Перезагрузили коммутатор, отвалился VPN у удалённого сотрудника, мобильный интернет пропал на минуту.
- 💻 Спящий режим ноутбука. Пользователь закрыл крышку с открытой 1С. Через час открыл — либо продолжил работу, либо увидел окно о потере связи.
- 💥 Аварийное завершение клиента. Процесс снят через диспетчер задач, компьютер выключили кнопкой, клиент упал с ошибкой.
- 🌐 Веб-клиент. Вкладку браузера закрыли без выхода из программы. Сервер узнаёт об этом не сразу.
- 🖥️ Терминальный сервер . Пользователь отключился от RDP-сессии, не выйдя из Windows. Иногда клиент продолжает жить, иногда терминальную сессию сбрасывают по таймауту, и тогда сеанс 1С теряет соединение.
- 🔁 Перезапуск рабочего процесса. Если кластер перезапускает процесс по превышению памяти или по расписанию, клиентам приходится переподключаться.
Отдельно стоят сеансы HTTP-сервисов и веб-сервисов с повторным использованием сеансов. Там сеанс намеренно живёт дольше отдельного запроса, чтобы следующий вызов не тратил время на вход. Такие сеансы в списке выглядят похоже, но это нормальная работа публикации, а не брошенные пользователи.
Чем пассивные сеансы мешают работе 1С
Один-два спящих сеанса на базу — норма. Проблемы начинаются, когда их десятки или когда «завис» сеанс человека, который держал важный объект.
Блокировки объектов
Когда пользователь открывает документ на редактирование, платформа ставит на него объектную блокировку. Она принадлежит сеансу и снимается, когда форма закрывается или сеанс завершается. Если клиент упал с открытым документом, блокировка может остаться за брошенным сеансом. Коллега откроет тот же документ и получит сообщение, что объект заблокирован другим пользователем.
Монопольный режим
Обновление конфигурации
с изменением структуры, загрузка .dt, тестирование и исправление базы требуют монопольного доступа. Платформа не даст его, пока в базе есть другие сеансы, и спящие тут не исключение. Администратор видит в списке пользователей человека, который ушёл домой ещё вчера.
Лицензии
Каждый клиентский сеанс использует клиентскую лицензию. При нехватке лицензий брошенные сеансы — первое, что нужно проверить. Увидеть, за какими сеансами числятся лицензии, можно командой rac session list --licenses.
Нагрузка на сервер
Спящий сеанс почти не тратит процессор, но держит данные сеанса в памяти. На сервере с сотнями пользователей и сутками жизни брошенных сеансов это заметно на графиках памяти рабочих процессов.
Как найти пассивные сеансы и управлять ими
Через консоль кластера
- Откройте «Администрирование серверов 1С Предприятия» (оснастка
1CV8 Servers.msc). - Раскройте дерево:
Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы. - Посмотрите на колонки «Соединение», «Спящий» и «Последняя активность». Пустое соединение — сеанс пассивный. «Спящий: да» — уже заснувший.
- Чтобы завершить сеанс, выделите строку и в контекстном меню выберите «Удалить».
Ветка «Сеансы» есть и на уровне всего кластера — там видны сеансы всех баз сразу. Это удобно, когда нужно понять, сколько всего брошенных сеансов на сервере.
Удаление сеанса — это принудительный выход пользователя. Всё, что он не записал, пропадёт. Если сеанс не спящий и у него есть соединение, сначала предупредите человека.
Через rac
Консоль работает не везде: на Linux-сервере её нет, а на Windows удобнее скрипт. Утилите rac нужен запущенный сервер администрирования ras (по умолчанию слушает порт 1545).
# идентификатор кластера
rac cluster list
# все сеансы кластера
rac session list --cluster=<uuid-кластера>
# подробности по одному сеансу, включая таймауты
rac session info --cluster=<uuid-кластера> --session=<uuid-сеанса>
# завершить сеанс
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
Если у кластера заданы администраторы, добавляйте к командам --cluster-user и --cluster-pwd. В выводе session list ищите поля hibernate (спящий или нет) и last-active-at (время последней активности).
Из самой программы
В типовых конфигурациях на БСП — Бухгалтерии 3.0, ЗУП 3.1, УТ 11 — есть обработка «Активные пользователи». Она открывается из раздела Администрирование → Обслуживание или через Все функции → Стандартные → Активные пользователи. В клиент-серверной базе из неё можно завершить выбранный сеанс, если у вас права администратора.
В Конфигураторе тот же список открывается через меню Администрирование → Активные пользователи, но завершать сеансы оттуда нельзя — только смотреть.
А что с файловой базой
В файловом варианте нет кластера, а значит, нет ни пассивных, ни спящих сеансов. Если пользователь после сбоя продолжает числиться в «Активных пользователях», дело в незакрытых процессах на его компьютере или блокировке файла базы. Проверьте, нет ли на этом компьютере (или на терминальном сервере) живого процесса 1С от имени этого пользователя, и завершите его.
Автоматическое завершение пассивных и спящих сеансов
Ручная чистка подходит для разовых случаев. Если брошенные сеансы мешают каждую неделю, настройте автоматику.
Уменьшить таймауты платформы
Самый прямой путь — сократить время засыпания и время завершения спящего сеанса. В свойствах информационной базы в консоли кластера новых версий платформы для этого есть поля про засыпание пассивного и завершение спящего сеанса; если в вашей версии их нет, используйте скрипт ниже.
Ориентиры для офиса, где люди работают днём:
- ⏱️ засыпание пассивного сеанса — 5–10 минут;
- 🌙 завершение спящего сеанса — 1–2 часа или до конца рабочего дня.
Не ставьте завершение слишком коротким. Сотрудник с ноутбуком, который переходит из переговорной в кабинет, потеряет несохранённый документ.
Скрипт на rac по расписанию
Скрипт находит все спящие сеансы и завершает их. Перед запуском выполните rac session list вручную и убедитесь, что поля в вашей версии называются так же.
#!/bin/bash
# Завершение спящих сеансов кластера 1С
RAC=/opt/1cv8/x86_64/8.3.25.1374/rac # путь к rac своей версии платформы
CLUSTER=$($RAC cluster list | awk -F' *: ' '/^cluster /{print $2; exit}')
$RAC session list --cluster="$CLUSTER" \
| awk -F' *: ' '/^session /{id=$2} /^hibernate /{if ($2=="yes") print id}' \
| while read -r SID; do
$RAC session terminate --cluster="$CLUSTER" --session="$SID"
echo "$(date '+%F %T') завершён спящий сеанс $SID"
done
На Linux поставьте его в cron, например ночью: 30 2 * * * /opt/scripts/kill_sleeping.sh >> /var/log/1c_sessions.log. На Windows ту же логику пишут на PowerShell и запускают через Планировщик заданий.
Запускайте чистку до ночных регламентов: обновления, бэкапа с выгрузкой в .dt, пересчёта итогов. Тогда утром не придётся разбираться, почему обновление не смогло получить монопольный доступ.
Блокировка сеансов перед регламентом
Если цель — освободить базу под обновление, удобнее не охотиться за отдельными сеансами, а включить блокировку начала сеансов. В БСП это Администрирование → Обслуживание → Блокировка работы пользователей: программа предупреждает людей, а затем завершает их сеансы, включая спящие. То же можно сделать в свойствах информационной базы в консоли кластера флажком блокировки начала сеансов.
Сбои, в которых виноват брошенный сеанс
Не каждая проблема с сеансами — это пассивные сеансы. Ниже — частые симптомы и что проверить в первую очередь.
Ошибки администратора
- ❌ Удалять сеансы фоновых заданий вместе со спящими. Колонка «Приложение» покажет «Фоновое задание» — такие сеансы не брошенные, они выполняют работу. Прерванное задание обмена или закрытия месяца придётся перезапускать.
- ❌ Завершать сеансы HTTP-сервисов интеграции. Сеанс сайта или мобильного приложения пересоздастся при следующем запросе, но текущий обмен может оборваться.
- ❌ Перезапускать рабочий процесс вместо удаления пары сеансов. Это обрывает соединения всех пользователей на этом процессе, а не только брошенных.
Как держать список сеансов в порядке
Несколько привычек, которые снимают большую часть проблем:
- Раз в неделю смотрите ветку «Сеансы» кластера. Если спящих больше 10–15% от числа пользователей, ищите причину в сети или терминальном сервере.
- Настройте выход из 1С при отключении от RDP. На терминальном сервере задайте групповой политикой время, через которое отключённая RDP-сессия завершается. Тогда клиент 1С закроется вместе с ней, а не останется висеть.
- Объясните пользователям ноутбуков: перед тем как закрыть крышку на ночь, нужно выходить из программы. Это дешевле любой настройки.
- Сделайте чистку частью регламента. Скрипт завершения спящих сеансов — до бэкапа и обновлений, а не после.
- Ведите журнал. Строка в логе на каждый завершённый сеанс помогает ответить на вопрос «кто выкинул меня из базы».
- Подбирайте таймауты под режим работы. В круглосуточной рознице завершать спящие сеансы через час опасно, в бухгалтерии с работой по графику — нормально.