При обслуживании серверов 1С, работающих в связке с ОС Debian и СУБД PostgreSQL, администраторы часто сталкиваются с необходимостью эксклюзивного доступа к информационной базе. Это критически важно при обновлении конфигурации, выполнении тиражных обновлений или проведении регламентных операций в СУБД. На операционных системах семейства Linux процедура блокировки отличается от привычной работы в Windows-оснастке, поэтому разберем подробно все доступные механизмы. При администрировании нескольких баз под ОС Windows подобные регламентные процессы можно упростить, настроив автоматическое пакетное обновление и тестирование баз 1С по расписанию.
Для начала проанализируем, как осуществляется удаленное администрирование кластера 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: Получение идентификатора кластера. Введем команду для вывода списка кластеров:
/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
Проанализируем параметры этой команды:
--sessions-deny=on — устанавливает запрет на запуск новых сеансов.--scheduled-jobs-deny=on — блокирует запуск регламентных и фоновых заданий, что критически важно для предотвращения конфликтов при обновлении метаданных.--permission-code — специальный ключ. Установив его, мы сможем зайти в конфигуратор или предприятие, используя параметр запуска /UC [Код], несмотря на общую блокировку.--denied-message — текст сообщения, который увидит пользователь при попытке входа.Чтобы снять блокировку после завершения работ, выполним аналогичную команду, заменив значения на off:
--sessions-deny=off --scheduled-jobs-deny=off
Если работа в консоли Linux кажется неудобной, мы можем воспользоваться привычной графической оснасткой "Администрирование серверов 1С:Предприятия" на рабочем месте под управлением Windows. Это возможно благодаря тому, что консоль умеет работать по протоколу TCP со службой RAS на Debian.
Разберем алгоритм действий:
1cv8_servers.msc).Важный нюанс: Графическая консоль в данном случае выступает лишь "пультом управления" для службы RAS на Linux. Если на сервере Debian не запущен процесс ras, консоль выдаст ошибку подключения.
Установка параметра sessions-deny=on предотвращает создание новых подключений, но не обрывает уже существующие. Чтобы принудительно завершить работу пользователей, нам нужно проанализировать список сеансов и удалить их.
Для получения списка сеансов в конкретной базе используем:
rac session --cluster=[ID] list --infobase=[ID]
Каждый сеанс имеет свой UUID. Для завершения сеанса выполним команду:
rac session --cluster=[ID] terminate --session=[ID_сеанса]
Если пользователей много, в среде Linux удобно использовать скрипты на Bash, которые в цикле перебирают идентификаторы сеансов и отправляют команду на их завершение.
Бывают ситуации, когда сервер 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С (на базе БСП) существуют встроенные механизмы программного управления кластером. Мы можем использовать общий модуль АдминистрированиеКластераRASКлиентСервер. Это позволяет писать обработки, которые будут блокировать базу автоматически по расписанию, вызывая утилиту rac через метод ЗапуститьПриложение. Рассмотрим фрагмент логики формирования строки параметров:
ШаблонКоманды = "%rac% infobase --cluster=%cluster% update --infobase=%ib% --sessions-deny=on --permission-code=%code%";
// Где параметры подставляются исходя из настроек сервера
Таким образом, мы выяснили, что администрирование 1С на Debian требует понимания работы службы RAS. Использование rac в связке с системными скриптами дает более гибкие возможности для автоматизации, а подключение через Windows-консоль позволяет сохранить привычный интерфейс управления для администратора.