Зависший сеанс в 1С 8.3: как найти «висяка» и завершить его без потерь

· 9 мин

Содержание

Чтобы отключить зависший сеанс в клиент-серверной 1С 8.3, откройте консоль администрирования серверов, раскройте Кластеры → <кластер> → Информационные базы → <база> → Сеансы, щёлкните по строке правой кнопкой и выберите «Удалить». Без консоли то же делает утилита rac: rac session terminate. В файловой базе консоли нет, там сеанс снимают на компьютере пользователя или закрытием открытого файла базы на сервере.

Способов несколько, и выбирают их по ситуации. Консоль — основной путь для администратора. rac — для скриптов и серверов без Windows. Остановка процесса rphost или службы — крайняя мера: она обрывает работу всех пользователей на этом процессе, а не одного «висяка».

Как понять, что сеанс действительно завис

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

Признаки зависшего сеанса:

  • 👻 пользователь клянётся, что вышел, а база показывает его в списке активных;
  • 🔒 при входе выходит сообщение о превышении числа лицензий, хотя реально работают меньше людей;
  • ⛔ обновление конфигурации не стартует: требуется монопольный доступ, а «лишний» сеанс его не даёт;
  • 🐢 документы не проводятся, висят на ожидании блокировки, и в консоли видно, кто её держит;
  • 💤 сеанс в консоли помечен как спящий и не просыпается часами.

Где смотреть подробности. В консоли кластера у каждого сеанса есть пользователь, имя компьютера, приложение (тонкий клиент, конфигуратор, фоновое задание, COM-соединение, веб-клиент), время начала и время последней активности. Если последняя активность была вчера, а компьютер давно выключен — это ваш кандидат.

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

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

Отключение сеансов через консоль администрирования серверов 1С

Консоль ставится вместе с сервером 1С. Если её нет в меню «Пуск», зарегистрируйте radmin.dll из папки bin нужной версии платформы от имени администратора:

regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"

Номер версии в пути подставьте свой. Версия консоли должна совпадать с версией сервера, иначе подключиться не получится. После регистрации откройте оснастку 1CV8 Servers.msc из той же папки.

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

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

Можно выделить несколько строк с Ctrl или Shift и удалить разом. Консоль покажет пользователю сообщение о завершении сеанса администратором, если клиент ещё на связи.

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

Сеанс удалился и появился снова

Так бывает, когда клиент жив и переподключается сам. Тонкий клиент после разрыва пытается восстановить связь. Если на компьютере пользователя висит процесс 1cv8c.exe, сеанс будет возвращаться.

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

Соединения и сеансы — не одно и то же

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

Командная строка: завершение сеансов через rac

Отдельной утилиты rmninfobase в поставке платформы 8.3 нет. Сеансами из командной строки управляет rac — клиент сервера администрирования ras. Это удобно, когда нужен скрипт перед ночным обновлением или когда сервер стоит на Linux без графической консоли.

Сначала должен работать ras. На Windows его ставят службой, на Linux запускают демоном. По умолчанию он слушает порт 1545 и сам подключается к агенту кластера на порту 1540.

ras cluster --daemon localhost:1540

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

rac localhost:1545 cluster list

rac localhost:1545 infobase summary list --cluster=<uuid-кластера>

rac localhost:1545 session list --cluster=<uuid-кластера> --infobase=<uuid-базы>

rac localhost:1545 session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Если на кластере заданы администраторы, добавьте к командам --cluster-user=<логин> --cluster-pwd=<пароль>. В выводе session list у каждого сеанса есть user-name, host, app-id и время последней активности — по ним и отбирают зависшие.

Чтобы посмотреть, кто занимает лицензии, удобна команда rac session list --licenses. Набор параметров отличается между версиями платформы, поэтому при сомнениях смотрите встроенную справку: rac help session.

В скриптах не завершайте «всех подряд». Фильтруйте по app-id: тонкий клиент — 1CV8C, конфигуратор — Designer, фоновое задание — BackgroundJob. Так вы не убьёте регламентное задание, которое и должно работать ночью.

Если консоль бессильна: процессы и службы ОС

Бывает, что консоль удаляет сеанс, а он остаётся. Или консоль вообще не отвечает. Тогда идут уровнем ниже — к процессам сервера 1С.

На сервере работают три вида процессов:

ПроцессЧто делаетПоследствия остановки
ragentагент сервера, порт 1540кластер перестаёт принимать подключения
rmngrменеджер кластера, порт 1541нарушается работа всего кластера
rphostрабочий процесс, обслуживает сеансыобрываются все сеансы на этом процессе

Завершение rphost разом выкидывает всех пользователей, которых он обслуживал, с потерей несохранённых данных. Делайте это после предупреждения людей или в нерабочее время.

Завершение рабочего процесса

  1. В консоли откройте Рабочие процессы кластера и посмотрите, какой процесс обслуживает проблемный сеанс, его PID и потребление памяти.
  2. В диспетчере задач Windows на вкладке «Подробности» найдите rphost.exe с этим PID.
  3. Завершите процесс. Менеджер кластера сам запустит новый рабочий процесс.

На Linux то же делает kill <PID>. Если процесс не реагирует, используют kill -9, но только после обычной попытки.

Перезапуск службы сервера 1С

Если зависло несколько сеансов и процессы не отвечают, перезапустите службу агента сервера 1С. В Windows она называется «Агент сервера 1С:Предприятия 8.3» с указанием разрядности. На Linux имя службы зависит от версии и способа установки: найдите его командой systemctl list-units | grep 1c и перезапустите через systemctl restart.

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

Очистка сеансовых данных кластера

Крайний шаг, когда после перезапуска службы «призраки» возвращаются. Сервер хранит сеансовые данные в каталоге кластера, обычно это srvinfo\reg_1541\snccntx*.

  1. Остановите службу агента сервера 1С.
  2. Скопируйте папку srvinfo целиком в резервное место.
  3. Удалите папки snccntx* внутри каталога reg_1541. Файлы реестра кластера 1CV8Clst.lst и 1CV8Reg.lst не трогайте: в них список баз и настройки кластера.
  4. Запустите службу.

Без копии srvinfo к этому шагу не переходите. Ошибка в выборе папки может стоить вам списка зарегистрированных баз.

Файловая база: как снять зависшее подключение

В файловом варианте нет кластера, консоли и rac. Каждый пользователь сам открывает файл 1Cv8.1CD по сети. Поэтому «зависший сеанс» здесь — это чаще всего живой процесс 1cv8c.exe или 1cv8.exe на чьём-то компьютере либо незакрытый файл на сервере после обрыва сети.

Что можно сделать:

  • 🖥️ На компьютере пользователя. Закройте программу или завершите процесс 1cv8c.exe в диспетчере задач. Это самый чистый вариант.
  • 📂 На сервере с общей папкой. Откройте fsmgmt.msc («Общие папки») → «Открытые файлы». Найдите 1Cv8.1CD и закройте его для нужного пользователя. Сеанс оборвётся, его незаписанные изменения пропадут.
  • 🧰 Из самой 1С. В типовых конфигурациях на БСП есть обработка «Активные пользователи». Она открывается из раздела Администрирование и умеет завершать сеансы. В файловом режиме она ставит блокировку, и программы пользователей закрываются сами в течение нескольких минут.
  • 🌐 Если база опубликована на веб-сервере. Сеансы веб-клиента живут в процессе веб-сервера. В IIS помогает перезапуск пула приложений, в Apache — перезапуск службы. Это оборвёт всех, кто работает через веб.

Конфигуратор тоже показывает список активных пользователей: Администрирование → Активные пользователи. Но только показывает — завершить сеанс оттуда нельзя.

Не удаляйте файл 1Cv8.1CL и временные каталоги рядом с базой, пока кто-то подключён. Сначала добейтесь, чтобы все вышли, затем сделайте копию 1Cv8.1CD, и только потом что-либо чистите.

Что выбрать в вашей ситуации

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

Как не допускать зависших сеансов: таймауты и настройки кластера

Лучше настроить сервер так, чтобы «висяки» уходили сами.

Спящие сеансы

В свойствах информационной базы в консоли есть два параметра:

  • ⏳ «Время засыпания пассивного сеанса» — через сколько секунд сеанс без связи с клиентом переходит в спящий режим и отдаёт лицензию;
  • 🧹 «Время завершения спящего сеанса» — через сколько секунд спящий сеанс удаляется совсем.

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

Перезапуск рабочих процессов

В свойствах кластера задают:

  • «Интервал перезапуска» — плановая замена рабочих процессов, например раз в сутки ночью;
  • «Допустимый объём памяти» и «Интервал превышения допустимого объёма памяти» — процесс, который раздулся сверх лимита, будет заменён;
  • «Выключенные процессы останавливать через» — сколько ждать завершения старого процесса;
  • флажок «Принудительно завершать проблемные процессы».

Новые сеансы при перезапуске уходят в свежий процесс, а старый доживает и завершается по таймауту.

Порядок перед обновлением

Перед обновлением конфигурации включите блокировку начала сеансов и блокировку регламентных заданий в свойствах базы. Задайте время начала с запасом в 10–15 минут и текст сообщения пользователям. Так вы избавитесь от ночной охоты за последним зашедшим бухгалтером.

Перед ночным обновлением базы
Выполнено: 0 / 6

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

Освобождается ли лицензия сразу после удаления сеанса?
Да. Как только сервер удаляет сеанс, связанная с ним лицензия возвращается в пул и доступна для нового входа.
Пропадут ли данные пользователя, если удалить его сеанс?
Незаписанные изменения в открытых формах пропадут. Записанные и проведённые документы останутся. Незавершённая транзакция откатится целиком.
Можно ли удалить сеанс, не будучи администратором кластера?
Если у кластера заданы администраторы, нужны их логин и пароль. Если не заданы, консоль пустит любого пользователя сервера с правами на подключение, поэтому администраторов кластера стоит назначить.
Почему в консоли два сеанса одного пользователя с одного компьютера?
Пользователь мог открыть программу дважды или переподключиться после обрыва, пока старый сеанс ещё не завершился. Старый сеанс с давней активностью можно удалять.
Можно ли автоматически завершать сеансы каждую ночь?
Да. Напишите скрипт на rac, который получает список сеансов базы и завершает их, и запускайте его планировщиком заданий Windows или cron перед регламентными работами.