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

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При обслуживании серверов 1С, работающих в связке с ОС Debian и СУБД PostgreSQL, администраторы часто сталкиваются с необходимостью эксклюзивного доступа к информационной базе. Это критически важно при обновлении конфигурации, выполнении тиражных обновлений или проведении регламентных операций в СУБД. На операционных системах семейства Linux процедура блокировки отличается от привычной работы в Windows-оснастке, поэтому разберем подробно все доступные механизмы. При администрировании нескольких баз под ОС Windows подобные регламентные процессы можно упростить, настроив автоматическое пакетное обновление и тестирование баз 1С по расписанию.

Понятие службы RAS и утилиты RAC

Для начала проанализируем, как осуществляется удаленное администрирование кластера 1С в Linux. В отличие от Windows, где консоль администрирования может взаимодействовать с сервером напрямую через COM-объекты, на Linux-серверах используется служба RAS (Remote Administration Service). Это промежуточный слой, который принимает команды от клиента и передает их кластеру.

Для управления из командной строки используется утилита RAC (Remote Administration Client). Чтобы наши команды имели эффект, на сервере Debian должен быть запущен демон ras. Рассмотрим пример настройки службы через systemd, чтобы управление было доступно всегда:


[Unit]
Description=1C:Enterprise Remote Administration Service
After=network.target srv1cv8-8.3.23@default.service

[Service]
Type=simple
User=usr1cv8
Group=grp1cv8
ExecStart=/opt/1C/v8.3/x86_64/ras cluster --daemon
Restart=always

[Install]
WantedBy=multi-user.target

После того как мы убедились, что служба запущена (по умолчанию на порту 1545), мы можем приступать к управлению блокировками.

Способ 1: Использование утилиты RAC в командной строке

Рассмотрим пошагово процесс блокировки сеансов через терминал. Для этого нам потребуются идентификаторы кластера и конкретной информационной базы. Выясним их последовательно.

Шаг 1: Получение идентификатора кластера. Введем команду для вывода списка кластеров:

/opt/1C/v8.3/x86_64/rac cluster list localhost:1545

В ответе мы увидим параметр cluster, представляющий собой UUID. Скопируем его.

Шаг 2: Получение идентификатора информационной базы. Зная ID кластера, выведем список всех баз:

/opt/1C/v8.3/x86_64/rac infobase summary list --cluster=[ID_кластера] localhost:1545

Шаг 3: Установка блокировки. Теперь воспользуемся параметрами sessions-deny и scheduled-jobs-deny. Рассмотрим пример полной команды для установки блокировки:


/opt/1C/v8.3/x86_64/rac infobase update \
--cluster=00000000-0000-0000-0000-000000000000 \
--infobase=11111111-1111-1111-1111-111111111111 \
--sessions-deny=on \
--scheduled-jobs-deny=on \
--permission-code=SecretKey123 \
--denied-message="Выполняется техническое обслуживание. Просьба зайти позже." \
localhost:1545

Проанализируем параметры этой команды:

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

--sessions-deny=off --scheduled-jobs-deny=off

Способ 2: Удаленное управление через Windows-консоль

Если работа в консоли Linux кажется неудобной, мы можем воспользоваться привычной графической оснасткой "Администрирование серверов 1С:Предприятия" на рабочем месте под управлением Windows. Это возможно благодаря тому, что консоль умеет работать по протоколу TCP со службой RAS на Debian.

Разберем алгоритм действий:

  1. Убедимся, что на компьютере администратора установлена та же версия платформы 1С, что и на сервере Debian. При установке должен быть выбран компонент "Дополнительные инструменты администрирования".
  2. Запустим консоль (файл 1cv8_servers.msc).
  3. Нажмем правой кнопкой на "Центральные серверы 1С:Предприятия" — "Создать" — "Центральный сервер".
  4. В поле "Имя" укажем IP-адрес или DNS-имя нашего сервера Debian. В поле "Порт" укажем порт службы RAS (1545), а не стандартный порт агента сервера (1540).
  5. После подключения мы увидим дерево кластеров и баз так же, как если бы сервер работал на Windows.
  6. Зайдем в свойства нужной информационной базы и установим флажки "Блокировка начала сеансов включена" и "Блокировка регламентных заданий включена".

Важный нюанс: Графическая консоль в данном случае выступает лишь "пультом управления" для службы RAS на Linux. Если на сервере Debian не запущен процесс ras, консоль выдаст ошибку подключения.

Завершение активных сеансов

Установка параметра sessions-deny=on предотвращает создание новых подключений, но не обрывает уже существующие. Чтобы принудительно завершить работу пользователей, нам нужно проанализировать список сеансов и удалить их.

Для получения списка сеансов в конкретной базе используем:

rac session --cluster=[ID] list --infobase=[ID]

Каждый сеанс имеет свой UUID. Для завершения сеанса выполним команду:

rac session --cluster=[ID] terminate --session=[ID_сеанса]

Если пользователей много, в среде Linux удобно использовать скрипты на Bash, которые в цикле перебирают идентификаторы сеансов и отправляют команду на их завершение.

Экстренное завершение через PostgreSQL

Бывают ситуации, когда сервер 1С перестает отвечать на команды rac из-за зависших процессов. В этом случае мы можем принудительно разорвать соединения на уровне базы данных. Рассмотрим ситуацию на примере PostgreSQL. Зайдем в терминал сервера и выполним команду от имени пользователя postgres:


sudo -u postgres psql -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'имя_вашей_базы' AND pid <> pg_backend_pid();"

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

Автоматизация через код 1С

В современных конфигурациях 1С (на базе БСП) существуют встроенные механизмы программного управления кластером. Мы можем использовать общий модуль АдминистрированиеКластераRASКлиентСервер. Это позволяет писать обработки, которые будут блокировать базу автоматически по расписанию, вызывая утилиту rac через метод ЗапуститьПриложение. Рассмотрим фрагмент логики формирования строки параметров:


ШаблонКоманды = "%rac% infobase --cluster=%cluster% update --infobase=%ib% --sessions-deny=on --permission-code=%code%";
// Где параметры подставляются исходя из настроек сервера

Таким образом, мы выяснили, что администрирование 1С на Debian требует понимания работы службы RAS. Использование rac в связке с системными скриптами дает более гибкие возможности для автоматизации, а подключение через Windows-консоль позволяет сохранить привычный интерфейс управления для администратора.

← На главную