Принудительное отключение пользователей от серверной базы 1С
Содержание
Чтобы завершить активные сеансы 1С в серверном режиме, откройте консоль администрирования кластера, найдите базу в ветке Информационные базы → <база> → Сеансы, выделите нужные сеансы и выполните команду «Удалить». Без графической консоли то же делает утилита rac: rac session terminate --cluster=<id> --session=<id>.
Сам по себе разрыв сеанса помогает ненадолго: пользователи, регламентные задания и внешние обмены тут же подключатся снова. Поэтому перед обновлением или выгрузкой базы сначала ставят запрет на вход, а уже потом отключают тех, кто остался. Ниже порядок действий для платформы 8.3 на Windows и Linux, разбор зависших подключений и готовый скрипт.
Что такое сеанс на сервере 1С и чем он отличается от соединения
Клиент сначала обращается к агенту сервера (порт 1540), тот передаёт его менеджеру кластера (1541), а работу с данными выполняет рабочий процесс rphost на порту из диапазона, заданного в свойствах рабочего сервера. Внутри кластера у каждого подключения есть две сущности:
- 🧑💻 Сеанс — логическая «сессия» пользователя в конкретной базе: кто, с какого компьютера, каким клиентом, когда последний раз что-то делал. Сеанс занимает лицензию.
- 🔌 Соединение — физический канал между клиентом и рабочим процессом. У одного сеанса в разные моменты могут быть разные соединения.
Завершая сеанс, вы закрываете работу пользователя в базе. Разрывая соединение, вы лишь обрываете канал, и клиент нередко переподключается сам.
Сеансы бывают не только у людей. По типу приложения их легко различить:
Приложение (в rac) | Что это | Можно ли просто удалить |
|---|---|---|
1CV8C | тонкий клиент | да, пользователь увидит сообщение |
1CV8 | толстый клиент | да |
WebClient | веб-клиент через браузер | да |
Designer | Конфигуратор | да, но несохранённые правки пропадут |
BackgroundJob | фоновое или регламентное задание | да, но задание стартует снова, если не запретить |
COMConnection | внешняя обработка, обмен по COM | да, внешняя программа переподключится |
WSConnection, HTTPServiceConnection | веб- и HTTP-сервисы | да, сервис откроет новый сеанс при следующем запросе |
Отсюда главный вывод: удалить все сеансы один раз мало. Надо закрыть источники новых подключений.
Завершение сеансов в консоли администрирования кластера
Консоль администрирования серверов 1С:Предприятия — оснастка MMC, она ставится вместе с платформой (компонент «Администрирование сервера 1С:Предприятия»). В меню «Пуск» она лежит в папке версии платформы.
Если консоль не открывается
Типичная ситуация после обновления платформы: оснастка зарегистрирована от старой версии, и консоль пишет, что не может создать компонент. Лечится перерегистрацией библиотеки из каталога текущей версии. Командную строку запускайте от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"
Номер версии в пути замените на свой. Консоль должна совпадать по версии с сервером, иначе подключение к кластеру не установится.
Пошагово
- Откройте консоль. Если сервера нет в дереве, щёлкните правой кнопкой по
Central 1C:Enterprise 8.3 servers→Создать → Центральный сервер 1С:Предприятия 8.3и укажите имя компьютера. - Раскройте
<сервер> → Кластеры → <кластер> → Информационные базы → <нужная база>. - Если кластер защищён, консоль спросит логин и пароль администратора кластера, затем — администратора базы.
- Откройте ветку
Сеансы. В списке видны пользователь, компьютер, приложение, время начала и последней активности. - Выделите сеансы (Shift и Ctrl работают как обычно), откройте контекстное меню и нажмите «Удалить».
- Обновите список клавишей F5 и убедитесь, что сеансы ушли.
Пользователь, чей сеанс удалили, теряет несохранённые данные в открытых формах. Проведённые документы и записанные элементы остаются. Предупредите людей хотя бы за 5–10 минут.
Сеансы всех баз кластера разом видны в ветке <кластер> → Сеансы — удобно, когда нужно освободить лицензии
, а не конкретную базу.
Ветка Соединения внутри рабочего процесса нужна, когда сеанса уже нет, а соединение держит базу. Здесь его можно разорвать отдельно.
Как завершить сеансы 1С через командную строку: ras и rac
Утилита rac — консольный клиент. Сама к кластеру она не подключается, ей нужен сервер администрирования ras. Это отдельный процесс, и по умолчанию он не запущен.
Запуск ras
На Windows ras удобно зарегистрировать службой. Пример для версии 8.3.24.1548, порт администрирования 1545:
sc create "1C:Enterprise 8.3 Remote Server" binPath= "\"C:\Program Files\1cv8\8.3.24.1548\bin\ras.exe\" cluster --service --port=1545 localhost:1540" start= auto DisplayName= "Сервер администрирования 1С 8.3"
sc start "1C:Enterprise 8.3 Remote Server"
На Linux достаточно запустить демоном из каталога платформы:
/opt/1cv8/x86_64/8.3.24.1548/ras cluster --daemon
Команды rac по порядку
Все команды ниже обращаются к localhost:1545. Если на кластере есть администратор, к каждой добавьте --cluster-user=<логин> --cluster-pwd=<пароль>.
- Узнайте идентификатор кластера:
rac cluster list localhost:1545
- Найдите идентификатор базы:
rac infobase summary list --cluster=<id кластера> localhost:1545
- Посмотрите сеансы базы:
rac session list --cluster=<id кластера> --infobase=<id базы> localhost:1545
- Завершите нужный сеанс по значению поля
session:
rac session terminate --cluster=<id кластера> --session=<id сеанса> localhost:1545
Для соединений есть пара команд rac connection list и rac connection disconnect. Им нужен идентификатор рабочего процесса, его показывает rac process list. Полный перечень параметров для вашей версии выводит rac help session и rac help connection — набор ключей между релизами платформы немного менялся.
rac session list --licenses показывает, какую лицензию занимает каждый сеанс. Помогает, когда пользователи жалуются на нехватку лицензий, а в базе вроде бы никого нет.
Какой способ выбрать
| Способ | Когда удобен | Ограничения |
|---|---|---|
| Консоль кластера (MMC) | разовое отключение, разбор глазами | только Windows, нужна совпадающая версия |
rac + ras | Linux, удалённый сервер, скрипты | нужно держать запущенным ras |
| Блокировка из самой базы | бухгалтер или админ без доступа к серверу | работает, только если конфигурация на БСП |
Запрет новых подключений и монопольный режим
Запрет входа ставится до отключения сеансов. Иначе вы удалите сеанс, а через минуту увидите его снова.
Блокировка в свойствах базы на кластере
В консоли откройте свойства информационной базы. На вкладке с параметрами блокировки:
- ✅ включите «Блокировка начала сеансов включена»;
- 🕒 при необходимости задайте начало и конец блокировки — например, с 22:00 до 23:30;
- 💬 впишите сообщение, которое увидят пользователи при попытке войти;
- 🔑 задайте код разрешения — с ним сможет зайти администратор;
- ⏸ отдельно включите «Блокировка регламентных заданий включена», чтобы фоновые задания не открывали новые сеансы.
То же самое через rac:
rac infobase update --cluster=<id кластера> --infobase=<id базы> --infobase-user=Администратор --infobase-pwd=<пароль> --sessions-deny=on --scheduled-jobs-deny=on --denied-message="Идёт обновление, вход после 23:30" --permission-code=7755 localhost:1545
Снимают блокировку той же командой с --sessions-deny=off --scheduled-jobs-deny=off.
Не забудьте снять блокировку после работ — иначе утром никто не войдёт, а сообщение будет висеть с вечера.
Вход в заблокированную базу
Администратор заходит с кодом разрешения через параметр запуска /UC:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UC7755
Для Конфигуратора режим меняется на DESIGNER, параметр /UC тот же.
Блокировка из интерфейса программы
В типовых конфигурациях на Библиотеке стандартных подсистем (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть обработка «Блокировка работы пользователей». Она живёт в разделе Администрирование, в группе про обслуживание базы. Обработка ставит ту же блокировку сеансов и сама завершает активные сеансы по истечении заданного времени. Доступ к серверу не нужен, нужны права администратора базы.
Список активных пользователей из самой программы открывается так: Главное меню → Функции для технического специалиста → Стандартные → Активные пользователи. Пункт «Функции для технического специалиста» включается в Сервис → Параметры.
Монопольный режим
Монопольный доступ нужен не для любой работы в Конфигураторе, а для обновления структуры базы, загрузки .dt, тестирования и исправления. Пока в базе есть чужие сеансы — включая фоновые задания и COM-соединения — платформа не даст его установить. Порядок такой: запрет входа и регламентных заданий → удаление сеансов → работа в Конфигураторе → снятие запрета.
Почему сеансы зависают и не завершаются
Бывает, что сеанс удалили, а он снова в списке, или удаление проходит, но база остаётся занятой. Причины проверяются по порядку.
Сеанс тут же появляется снова
- 🔁 Регламентное задание по расписанию — проверьте, включена ли блокировка регламентных заданий.
- 🔁 Внешняя программа по COM или веб-сервис — найдите компьютер в колонке «Компьютер» и остановите обмен на источнике.
- 🔁 Пользователь просто зашёл заново — значит, не стоит запрет начала сеансов.
Сеанс висит часами без активности
Если клиентский компьютер выключили или пропала сеть, сервер какое-то время держит сеанс в «спящем» состоянии — на случай, если клиент вернётся. В списке это видно по времени последней активности, которое давно не меняется. Такой сеанс спокойно удаляется вручную.
Удаление не помогает: идёт долгая операция
Если сеанс выполняет тяжёлый запрос или проведение с длинной транзакцией, удаление отработает только после отката транзакции. Откат может длиться столько же, сколько шла операция.
Что посмотреть:
- Ветку
Блокировкиу базы в консоли: кто держит управляемые блокировки и кто их ждёт. - Активность на стороне СУБД: в MS SQL — монитор активности или
sp_who2, в PostgreSQL — представлениеpg_stat_activity. Долгий запрос с ожиданием блокировки виден сразу. - Нагрузку процесса
rphostв диспетчере задач илиtop.
-- PostgreSQL: запросы базы buh, которые идут дольше 10 минут
SELECT pid, state, now() - query_start AS duration, left(query, 120) AS query
FROM pg_stat_activity
WHERE datname = 'buh' AND now() - query_start > interval '10 minutes'
ORDER BY duration DESC;
Крайняя мера — перезапуск рабочего процесса
Если сеанс не уходит и транзакция не откатывается, остаётся завершить процесс rphost, который его обслуживает. Вместе с ним оборвутся сеансы всех пользователей, работающих через этот процесс, — в том числе в других базах. Делайте это вне рабочего времени или после общего предупреждения. Перезапуск службы агента сервера 1С тоже допустим, но он рвёт вообще все сеансы кластера.
Автоматическое отключение активных сеансов по расписанию
Ночные обновления и выгрузки удобно делать скриптом: поставить запрет, завершить сеансы, выполнить работу, снять запрет. Ниже PowerShell-скрипт на основе rac. Он находит базу по имени и завершает все её сеансы.
$rac = "C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
$srv = "localhost:1545"
$base = "buh" # имя базы в кластере, латиницей
$auth = @() # при админе кластера: @("--cluster-user=adm","--cluster-pwd=123")
# 1. Кластер
$line = & $rac cluster list $srv | Select-String '^cluster\s*:' | Select-Object -First 1
$cluster = $line.ToString().Split(':')[1].Trim()
# 2. База по имени
$ib = $null; $cur = $null
foreach ($l in & $rac infobase summary list --cluster=$cluster @auth $srv) {
if ($l -match '^infobase\s*:\s*(\S+)') { $cur = $Matches[1] }
if ($l -match '^name\s*:\s*(\S+)' -and $Matches[1] -eq $base) { $ib = $cur }
}
if (-not $ib) { Write-Error "База $base не найдена"; exit 1 }
# 3. Завершение всех сеансов базы
$sessions = & $rac session list --cluster=$cluster --infobase=$ib @auth $srv |
Select-String '^session\s*:\s*(\S+)' | ForEach-Object { $_.Matches[0].Groups[1].Value }
foreach ($s in $sessions) {
& $rac session terminate --cluster=$cluster --session=$s @auth $srv
}
Write-Output ("Завершено сеансов: {0}" -f $sessions.Count)
Перед третьим шагом вставьте команду rac infobase update с --sessions-deny=on из раздела про блокировку, а в конце сценария — такую же с off. Запускают скрипт через Планировщик заданий Windows от учётной записи, у которой есть доступ к каталогу платформы.
Пароли администраторов кластера и базы в открытом виде в скрипте — риск. Ограничьте доступ к файлу правами NTFS и не кладите его в общую папку.
Для контроля, а не отключения, хватит того же rac session list по расписанию: выгружайте число сеансов в лог и смотрите, кто сидит в базе ночью, когда работать никто не должен. Часто так находятся забытые обмены и «вечные» сеансы бухгалтеров, которые не выходят из программы неделями.
Частые вопросы
Можно ли завершить сеансы, если база файловая?
rac работают только с серверными базами. В файловой базе пользователей отключают через обработку блокировки в самой конфигурации или закрытием клиентов на их компьютерах.Освобождается ли лицензия сразу после удаления сеанса?
Чем удаление сеанса отличается от выхода пользователя?
Можно ли отключить только неактивных пользователей?
last-active-at в выводе rac session list и завершайте их по одному.Нужен ли запущенный ras, чтобы работала графическая консоль?
ras нужен только для rac и сторонних утилит администрирования.