Принудительное отключение сеанса 1С на сервере без остановки службы
Содержание
Чтобы выгнать пользователя из
серверной базы 1С, откройте консоль администрирования серверов 1С, раскройте Кластеры → <кластер> → Информационные базы → <база> → Сеансы, найдите строку с именем пользователя и выберите в контекстном меню «Удалить». Сеанс завершится, лицензия освободится, служба сервера и остальные пользователи продолжат работать.
Если консоли нет под рукой или отключать нужно регулярно, то же самое делает утилита rac из командной строки. Блокировка начала сеансов не пустит людей обратно на время работ, а процессы ОС и СУБД — запасной вариант для сеансов, которые не удаляются штатно.
Как выгнать пользователя из 1С через консоль кластера
Консоль — самый безопасный способ: она завершает ровно один сеанс и не трогает соседей.
Что нужно заранее
- 🖥️ Консоль администрирования серверов 1С той же версии платформы, что и сервер. Ставится вместе с платформой, если отметить компонент администрирования.
- 🔑 Права администратора кластера. Если администраторы кластера заданы, консоль спросит логин и пароль при открытии кластера.
- 🔌 Доступ к серверу по порту агента 1540.
Если консоль не открывается и пишет об ошибке создания объекта, перерегистрируйте библиотеку от имени администратора: regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\radmin.dll". Путь — к папке bin той версии, что стоит на сервере.
Пошагово
- Запустите консоль. Если сервер ещё не добавлен, нажмите на «Central 1C:Enterprise 8.3 servers» правой кнопкой → «Создать» → «Центральный сервер 1С:Предприятия 8.3» и укажите имя сервера.
- Раскройте
Кластеры → <кластер> → Информационные базы → <нужная база>. - Откройте узел
Сеансы. В списке видны пользователь, компьютер, тип приложения (тонкий клиент, Конфигуратор, фоновое задание, COM-соединение), время начала и последней активности. - Найдите нужного пользователя. Удобно отсортировать по колонке «Пользователь» или «Компьютер».
- Правая кнопка по строке → «Удалить». Подтвердите.
У пользователя появится сообщение о разрыве, клиент закроется. Несохранённые данные в открытых формах пропадут, поэтому если есть возможность — позвоните человеку заранее.
Сеанс или соединение: что удалять
В дереве базы есть два похожих узла: Сеансы и Соединения. Разница принципиальная:
| Что удаляете | Что произойдёт |
|---|---|
| Сеанс | Работа пользователя завершается, лицензия освобождается |
| Соединение | Рвётся только сетевое подключение, клиент обычно восстанавливает его сам и продолжает работу |
Чтобы выгнать пользователя, удаляйте именно сеанс.
Когда сеанс не удаляется
Сеанс, который прямо сейчас выполняет долгий запрос к СУБД, может висеть в списке после удаления. Платформа ждёт окончания вызова. Посмотрите колонку «Соединение с СУБД» у этого сеанса: если там стоит номер, запрос ещё идёт, и его придётся прервать в самой СУБД (раздел про SQL Server и PostgreSQL ниже).
Кто держит базу: журнал регистрации и активные пользователи
Перед отключением полезно понять, кто именно в базе и что делает. Иногда «зависший» пользователь — это фоновое задание обмена или COM-соединение внешней программы, и выгонять его бессмысленно: оно запустится снова.
Список активных пользователей
- В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) откройте
Администрирование → Обслуживаниеи найдите там «Активные пользователи». Для клиент-серверной базы в этой форме есть команда завершения сеанса — она работает через тот же кластер и попросит параметры администратора кластера, если они заданы. - В Конфигураторе:
Администрирование → Активные пользователи. Здесь можно только посмотреть список, выгнать никого нельзя.
Журнал регистрации
Журнал не отключает пользователей, но отвечает на вопрос «кто и откуда зашёл». Откройте его (в БСП — Администрирование → Обслуживание → Журнал регистрации, в Конфигураторе — Администрирование → Журнал регистрации) и поставьте отбор по событиям начала и завершения сеанса.
Что смотреть:
- 👤 пользователь и компьютер — чтобы найти человека, а не только строку в консоли;
- 🕐 время начала сеанса — если сеанс открыт со вчерашнего вечера, это забытый клиент;
- 🔁 приложение — фоновые задания и COM-соединения видны отдельно от людей;
- 🔢 номер сеанса — по нему строка журнала совпадает со строкой в консоли кластера.
Если один и тот же пользователь заходит снова через минуту после удаления, по журналу видно, с какого компьютера. Чаще всего это обработка или внешняя программа, которая подключается по расписанию под учётной записью человека.
Блокировка начала сеансов: выгнать всех и не пустить обратно
Когда нужно освободить базу для обновления или выгрузки в .dt, удалять сеансы по одному мало: люди тут же зайдут снова. Сначала закройте вход.
Через свойства базы в консоли
- В консоли кластера откройте свойства информационной базы (правая кнопка по базе → «Свойства»).
- Включите флажок «Блокировка начала сеансов включена».
- Задайте «Начало» и «Конец» блокировки, текст сообщения для пользователей и «Код разрешения» — например,
0711. - При необходимости включите «Блокировка регламентных заданий включена», чтобы не стартовали фоновые обмены.
- Сохраните и удалите оставшиеся сеансы, как описано выше.
Сами вы зайдёте с кодом разрешения в параметре запуска:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" DESIGNER /S srv1c\buh /UC0711
Тот же /UC0711 можно дописать в строку «Дополнительные параметры запуска» в свойствах базы в окне запуска 1С.
Через саму конфигурацию
В типовых конфигурациях на БСП есть обработка «Блокировка работы пользователей» (раздел Администрирование → Обслуживание). Она делает мягче: пользователи получают предупреждение, у них есть несколько минут сохранить документы, после чего программа сама завершает их сеансы. Для клиент-серверного режима обработка попросит параметры администрирования кластера.
Не забудьте снять блокировку после работ. Иначе утром бухгалтерия увидит ваше сообщение вместо базы. Если задали время окончания, блокировка снимется сама.
Завершение процессов на сервере: rphost и клиент на терминале
Этот способ грубее консоли. Используйте его, только если сеанс не удаляется штатно.
Процесс rphost
Рабочий процесс rphost.exe (на Linux — rphost) обслуживает сеансы сразу многих пользователей. Завершение rphost оборвёт работу всех, чьи сеансы он обслуживал, с потерей несохранённых данных. Делайте это вне рабочего времени или после предупреждения людей.
Как выбрать нужный процесс:
- В консоли кластера откройте
Рабочие процессыи посмотрите, какой процесс обслуживает проблемный сеанс, — у каждого виден PID и порт. - Если процессов несколько, «убивайте» только тот, где висит проблемный сеанс.
- Завершите его по PID: в Windows —
taskkill /PID 4812 /F, в Linux —kill 4812, и только если не помогло —kill -9 4812.
Менеджер кластера сам запустит новый рабочий процесс. Пользователям других процессов перезаходить не придётся.
Клиент на терминальном сервере
Если сотрудники работают через RDP, а сеанс 1С «висит», потому что человек закрыл окно RDP, проще выгнать его со стороны терминала:
- в Диспетчере задач на вкладке «Пользователи» выберите пользователя → «Выйти»;
- или завершите только его клиент 1С:
taskkill /F /FI "USERNAME eq ivanov" /IM 1cv8c.exe
Для толстого клиента имя процесса 1cv8.exe. После этого сеанс в кластере закроется по разрыву соединения; если строка осталась, удалите её в консоли.
Отключение на уровне СУБД: SQL Server и PostgreSQL
В СУБД нет «пользователей 1С», есть подключения рабочих процессов. Один и тот же канал к базе данных по очереди используют разные сеансы. Поэтому прерывать подключение в СУБД имеет смысл в одном случае: сеанс завис на долгом запросе, а удаление в консоли не срабатывает.
Номер подключения берите из колонки «Соединение с СУБД» проблемного сеанса в консоли кластера.
Microsoft SQL Server
Найти активные запросы к базе buh и прервать нужный:
-- кто сейчас выполняет запросы к базе buh
SELECT s.session_id, s.login_name, s.host_name, r.status, r.command, r.start_time
FROM sys.dm_exec_sessions s
JOIN sys.dm_exec_requests r ON r.session_id = s.session_id
WHERE DB_NAME(r.database_id) = 'buh';
-- прервать подключение с номером 87
KILL 87;
PostgreSQL
-- активные запросы к базе buh
SELECT pid, usename, client_addr, state, query_start, left(query, 80)
FROM pg_stat_activity
WHERE datname = 'buh' AND state <> 'idle';
-- сначала мягко отменить запрос
SELECT pg_cancel_backend(23145);
-- если не помогло — закрыть подключение
SELECT pg_terminate_backend(23145);
После KILL или pg_terminate_backend транзакция откатывается. Если она шла несколько часов, откат тоже займёт время, и до его конца блокировки сохранятся. Длинную транзакцию проведения или закрытия месяца лучше дождаться, чем обрывать.
Скрипт: как принудительно отключить пользователя 1С из командной строки
Утилита rac лежит в папке bin платформы и работает через сервер администрирования ras (порт 1545 по умолчанию). На Windows ras обычно регистрируют службой, на Linux запускают командой ras cluster --daemon.
Базовые команды:
rac cluster list # UUID кластера
rac infobase summary list --cluster=<UUID> # базы и их UUID
rac session list --cluster=<UUID> --infobase=<UUID_базы>
rac session terminate --cluster=<UUID> --session=<UUID_сеанса>
Если заданы администраторы кластера, добавляйте --cluster-user=admin --cluster-pwd=.... Остальные параметры смотрите в rac help session.
Скрипт для Linux: выгнать из базы buh все сеансы одного пользователя.
#!/bin/bash
RAC=/opt/1cv8/x86_64/8.3.xx.xxxx/rac
SRV=localhost:1545
DB=buh
USER_1C="Иванов И.И."
CL=$($RAC $SRV cluster list | awk '/^cluster /{print $3; exit}')
IB=$($RAC $SRV infobase summary list --cluster=$CL \
| awk -v db="$DB" '/^infobase /{id=$3} /^name /{if ($3==db) print id}')
$RAC $SRV session list --cluster=$CL --infobase=$IB \
| awk -v u="$USER_1C" '/^session /{s=$3}
/^user-name /{sub(/^user-name *: */,""); if ($0==u) print s}' \
| while read SID; do
echo "Завершаю сеанс $SID"
$RAC $SRV session terminate --cluster=$CL --session=$SID
done
Как использовать:
- 🧪 Сначала запустите скрипт без строки с
terminate, только сecho, и убедитесь, что найдены нужные сеансы. - ⏰ Для ночного обслуживания ставьте его в
cronили Планировщик заданий Windows перед резервным копированием. - 🔁 Уберите фильтр по пользователю — получите отключение всех сеансов базы перед обновлением.
На Windows логика та же: rac.exe выдаёт текст в формате «ключ : значение», его удобно разбирать в PowerShell через Select-String.
Как не допускать зависших сеансов: таймауты и настройки
Зависшие сеансы занимают лицензии и мешают обновлению. Часть проблем снимают настройки.
| Где | Настройка | Что даёт |
|---|---|---|
| Свойства информационной базы в консоли | «Засыпание пассивного сеанса» и «Завершение спящего сеанса» (в секундах) | Сеанс без активного соединения засыпает, а затем закрывается сам |
| Свойства кластера | «Принудительно завершать проблемные процессы» | Кластер сам перезапускает рабочие процессы, которые перестали отвечать |
| Свойства кластера | «Выключенные процессы останавливать через» | Старые rphost после перезапуска не живут бесконечно |
| Терминальный сервер | Лимит для отключённых RDP-сеансов в групповой политике | Брошенный RDP закрывается вместе с клиентом 1С |
Ещё несколько привычек, которые экономят ночные звонки:
- 👥 Каждому сотруднику — своя учётная запись в 1С. Под общим «Бухгалтер» не понять, кого выгонять.
- 🤖 Обмены и внешние сервисы — под отдельными пользователями. Их сеансы сразу видно в консоли.
- 📢 Плановые работы — через блокировку с сообщением и временем, а не внезапным удалением сеансов.
Частые ошибки
- ❌ Удаляют соединение вместо сеанса. Клиент переподключается, пользователь остаётся в базе.
- ❌ Перезапускают службу сервера 1С ради одного человека. Выгоняют всех. Хватило бы удалить один сеанс.
- ❌ Убивают первый попавшийся rphost. Если процессов несколько, сначала посмотрите, где висит нужный сеанс.
- ❌ Выгоняют фоновое задание обмена. Оно перезапускается по расписанию. Нужно включить блокировку регламентных заданий или отключить задание.
- ❌ Оставляют блокировку начала сеансов без даты окончания и уходят домой.
Частые вопросы
Узнает ли пользователь, что его отключили?
Освобождается ли лицензия после удаления сеанса?
rac session list --licenses.