Принудительное отключение сеансов 1С: от консоли кластера до SQL

· 10 мин

Содержание

Чтобы выкинуть пользователей из базы 1С на сервере, сначала включите блокировку начала сеансов, а потом удалите сеансы в консоли кластера: Кластеры → <кластер> → Информационные базы → <база> → Сеансы, выделить сеансы → правая кнопка → Удалить. Без блокировки клиенты сразу переподключатся, и через минуту список снова заполнится.

Способов отключить пользователей несколько, и выбирают их по ситуации. Штатная блокировка из программы — для планового обновления. Консоль кластера или rac — когда надо быстро и точечно. Диспетчер задач, остановка службы и SQL — аварийные варианты: они обрывают работу грубо, и незаписанные документы пропадут.

СпособКогда подходитЧем рискуете
Блокировка из программы (БСП)Плановое обновление, есть время предупредитьПочти ничем
Консоль кластераНужно отключить одну базу или одного человекаПотеря несохранённых данных у отключённых
rac через RASСкрипт по расписанию, нет доступа к MMCТо же, плюс ошибка в UUID ударит не по той базе
Завершение rphostПроцесс завис, консоль не отвечаетПадают все базы на этом процессе
Остановка службы агентаСервер в неработоспособном состоянииОтключаются все базы кластера
Разрыв соединений в СУБДВосстановление БД из бэкапа на уровне SQLСеансы 1С остаются висеть в кластере

Шаг первый: закрыть вход и предупредить людей

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

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

  1. Откройте Администрирование серверов 1С Предприятия и раскройте Информационные базы.
  2. Правой кнопкой по нужной базе → Свойства. Понадобится логин и пароль администратора базы.
  3. Отметьте Блокировка начала сеансов включена.
  4. Задайте Начало и Конец блокировки. Пустой конец — блокировка до ручного снятия.
  5. Заполните Сообщение — его увидит пользователь при попытке входа. Например: «Обновление до 21:00, звоните в ИТ, доб. 214».
  6. Заполните Код разрешения — с ним сможете войти вы сами.
  7. Отметьте Блокировка регламентных заданий включена, если обновляете конфигурацию.

Войти в заблокированную базу администратор может с параметром запуска /UC:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" ENTERPRISE /S srv1c\buh /N Администратор /P Пароль /UC 4815

Код разрешения и учётные данные в ярлыке видны всем, кто откроет его свойства. Для разового входа вводите их вручную или храните bat-файл в папке с ограниченным доступом.

Как отключить пользователей средствами самой 1С

Типовые конфигурации на БСП — Бухгалтерия 3.0, ЗУП 3.1, УТ 11, ERP — умеют выгонять пользователей сами. Этот способ самый мягкий: программа сначала предупреждает, а затем завершает сеансы.

В Бухгалтерии 3.0 путь такой: Администрирование → Обслуживание → Администрирование → Блокировка работы пользователей. В ЗУП 3.1 и УТ 11 раздел Администрирование тоже есть, а нужная команда находится в той же группе «Обслуживание».

Что делает эта форма:

  • 🔒 ставит ту же блокировку начала сеансов, что и консоль кластера;
  • ⏱ задаёт время начала и окончания блокировки;
  • 💬 показывает работающим сотрудникам предупреждение с вашим текстом;
  • 🚪 после наступления времени блокировки завершает их сеансы.

Рядом лежит команда Активные пользователи. Там видно, кто сейчас в базе, с какого компьютера и в каком приложении. Отдельного человека можно отключить из этого списка, если у вас права полного администратора.

Блокировку из БСП можно включить и без интерфейса — через параметр запуска:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" ENTERPRISE /S srv1c\buh /N Администратор /P Пароль /C ЗавершитьРаботуПользователей /UC 4815

Снять её — тем же способом с параметром /C РазрешитьРаботуПользователей.

Сеансы, открытые в Конфигураторе, команда из программы не закроет. Их отключают в консоли кластера или через rac.

Как выкинуть пользователей из базы 1С через консоль кластера

Консоль Администрирование серверов 1С Предприятия — основной инструмент администратора. Она ставится вместе с сервером 1С. Если оснастка не открывается или пишет об ошибке регистрации, зарегистрируйте radmin.dll нужной версии из командной строки от администратора:

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

Порядок отключения:

  1. Подключитесь к центральному серверу: Central 1C:Enterprise 8.3 servers → Создать → Центральный сервер 1С:Предприятия 8.3, имя сервера и порт агента 1540.
  2. Раскройте Кластеры → <имя кластера>. Если задан администратор кластера, консоль запросит его логин и пароль.
  3. Перейдите в Информационные базы → <база> → Сеансы.
  4. Отсортируйте по колонке Приложение. Тут видно, кто работает в «Тонком клиенте», кто в «Конфигураторе», а что — «Фоновое задание».
  5. Выделите сеансы (Shift или Ctrl), правая кнопка → Удалить.

Пользователь увидит сообщение о разрыве соединения. Всё, что он не успел записать, пропадёт.

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

Если сеанс после удаления висит в списке дольше минуты, обычно он ждёт завершения долгого серверного вызова. Посмотрите узел Соединения той же базы и удалите соединение этого сеанса.

Отключение сеансов через RAS и утилиту rac

Когда консоль недоступна — сервер на Linux, нужен скрипт по расписанию, подключаетесь удалённо — работает пара ras + rac. RAS — сервер администрирования, по умолчанию слушает порт 1545. rac — консольный клиент к нему.

Запуск RAS как службы на Windows (имя службы и путь подставьте свои):

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= "1C:Enterprise 8.3 Remote Server"
sc start "1C:Enterprise 8.3 Remote Server"

Дальше — три запроса, чтобы получить идентификаторы, и одна команда на отключение:

rac cluster list
rac infobase summary list --cluster=<uuid-кластера>
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Если на кластере задан администратор, добавьте к командам --cluster-user= и --cluster-pwd=. Сервер RAS указывают последним аргументом, например srv1c:1545; без него rac идёт на localhost:1545.

Блокировка начала сеансов тоже ставится из rac:

rac infobase update --cluster=<uuid-кластера> --infobase=<uuid-базы> --infobase-user=Администратор --infobase-pwd=Пароль --sessions-deny=on --scheduled-jobs-deny=on --denied-message="Обновление до 21:00" --permission-code=4815

Снимают её тем же вызовом с --sessions-deny=off --scheduled-jobs-deny=off.

Готовый bat для отключения всех сеансов одной базы:

@echo off
set RAC="C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
set CL=<uuid-кластера>
set IB=<uuid-базы>

for /f "tokens=2 delims=: " %%s in ('%RAC% session list --cluster=%CL% --infobase=%IB% ^| findstr /b /c:"session "') do (
  %RAC% session terminate --cluster=%CL% --session=%%s
)

findstr /b /c:"session " берёт только строки, которые начинаются со слова session и пробела, поэтому строка session-id с порядковым номером в выборку не попадает.

Версия rac должна совпадать с версией сервера. Другие подкоманды и параметры смотрите в rac help session и rac help infobase — у разных релизов платформы набор отличается.

Диспетчер задач: рабочие процессы и терминальные сеансы

Диспетчер задач — инструмент на случай, когда консоль кластера зависла или не подключается. Работает он грубо.

Рабочий процесс сервера. Сеансы пользователей обслуживает rphost.exe. На вкладке «Подробности» их может быть несколько. Завершение rphost.exe обрывает все сеансы на нём — а это могут быть пользователи разных баз. Агент ragent.exe перезапустит процесс, и через несколько секунд база снова доступна.

Какой rphost обслуживает нужную базу, видно в консоли кластера: узел Рабочие процессы показывает PID и число соединений. Сопоставьте PID с колонкой в диспетчере задач.

Убивайте rphost только в нерабочее время или когда сервер уже не обслуживает людей. Оборвутся все сеансы на этом процессе, транзакции откатятся.

Терминальный сервер . Если сотрудники работают через RDP, можно выкинуть человека целиком — вместе с его 1С. Вкладка «Пользователи» → правая кнопка → Выйти. Из командной строки:

query session
logoff 3

Здесь 3 — идентификатор из колонки ID. Это крайняя мера: закроются вообще все программы пользователя.

Файловая база в сетевой папке. Здесь нет кластера, поэтому выкинуть пользователей можно только на стороне файлового сервера. Откройте compmgmt.msc → Общие папки → Открытые файлы, найдите 1Cv8.1CD и закройте его для нужных пользователей. Тот же эффект даёт openfiles /disconnect, если на сервере включено отслеживание открытых файлов.

Остановка службы агента сервера 1С

Остановка службы — аварийный выход. Она отключает все базы кластера разом. Нужна, когда:

  • 🧱 консоль и rac не отвечают;
  • 🔁 сеансы удаляются и тут же появляются снова, хотя блокировка стоит;
  • 🧹 вы чистите сеансовые данные или переносите кластер.

Службу находят в services.msc по слову «1C:Enterprise». Из командной строки удобнее через короткое имя:

sc query state= all | findstr /i "1C:Enterprise"
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

На Linux служба называется по номеру релиза, например srv1cv8-8.3.24.1548@default. Остановка: systemctl stop srv1cv8-8.3.24.1548@default. Точное имя покажет systemctl list-units | grep 1cv8.

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

После старта службы клиенты переподключаются сами — если блокировка не стоит.

Разрыв соединений на уровне СУБД (SQL Server и PostgreSQL)

Обрывать соединения в СУБД есть смысл в одном случае: вы восстанавливаете базу из бэкапа средствами SQL и сервер не даёт её перезаписать. Для обычного отключения пользователей этот способ не годится. Сеансы 1С при этом остаются в кластере, а рабочий процесс просто откроет новое соединение.

Правильная последовательность:

  1. Включите блокировку начала сеансов и регламентных заданий.
  2. Удалите сеансы в консоли кластера.
  3. Только после этого рвите оставшиеся соединения в СУБД.

Microsoft SQL Server. Кто подключён к базе:

SELECT session_id, login_name, host_name, program_name
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('buh');

Отключить всех и не пускать новых, пока идёт восстановление:

ALTER DATABASE [buh] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- восстановление
ALTER DATABASE [buh] SET MULTI_USER;

Отдельное соединение закрывают командой KILL 57, где 57 — session_id из первого запроса.

PostgreSQL. Список соединений и их разрыв:

SELECT pid, usename, client_addr, application_name
FROM pg_stat_activity
WHERE datname = 'buh';

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'buh' AND pid <> pg_backend_pid();

Перед DROP DATABASE или восстановлением в PostgreSQL временно запретите новые подключения: ALTER DATABASE buh WITH ALLOW_CONNECTIONS false;. После работ верните true.

Если SET MULTI_USER забыть, 1С не сможет подключиться к базе. Ошибка будет выглядеть как сбой соединения с СУБД, и искать причину придётся долго.

Если пользователи возвращаются: разбор и профилактика

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

Чтобы не выгонять людей в пожарном режиме каждый раз, заведите простой порядок:

  • 📅 Окно обслуживания — один и тот же день и час, о котором все знают.
  • 📢 Рассылка за день и напоминание за 15 минут.
  • 🌙 Ночные обновления и бэкапы — по bat-файлу с rac: включить блокировку, завершить сеансы, выполнить работу, снять блокировку. Запускайте его из Планировщика заданий Windows или cron.
  • 🗝 Код разрешения — один на команду ИТ, меняйте его после ухода сотрудника.
  • 👤 Администратор кластера с паролем — иначе выкинуть всех из базы сможет любой, у кого есть консоль.

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

Пропадут ли данные у отключённого пользователя?
Записанные документы останутся. Всё, что было открыто и не записано, пропадёт, а начатая транзакция откатится.
Освобождается ли лицензия после удаления сеанса?
Да, лицензия возвращается в пул сразу после завершения сеанса. Проверить можно в консоли кластера или командой rac session list --licenses.
Можно ли отключить пользователя без прав администратора кластера?
Если в базе на БСП у вас полные права, отключите его через «Активные пользователи». Сеансы Конфигуратора и других баз без прав администратора кластера не закрыть.
Как узнать, кто держит базу, если консоль не открывается?
Запустите rac session list с любого компьютера с установленной платформой той же версии, указав адрес RAS. Для файловой базы смотрите открытые файлы на файловом сервере.
Чем удаление сеанса отличается от удаления соединения?
Сеанс — это работа пользователя в базе, соединение — канал между клиентом и рабочим процессом. Удаление сеанса выкидывает человека; удаление соединения помогает, когда сеанс завис и не удаляется.