В процессе администрирования крупных систем на платформе 1С часто возникает необходимость автоматизировать регламентные операции, такие как обновление конфигураций, создание резервных копий или обслуживание баз данных. Одной из ключевых задач при этом является программное управление блокировкой сеансов и регламентных заданий. Рассмотрим подробно, как можно реализовать управление кластером серверов через API, используя современные инструменты, такие как 1С:Исполнитель, служба RAS и встроенный HTTP API, что особенно актуально при пошаговой реализации защищенной IT инфраструктуры на предприятии.
Одним из наиболее эффективных и современных способов является использование 1С:Исполнителя (1C:Executor). Это кроссплатформенный интерпретатор скриптов, который позволяет писать сценарии на языке, очень похожем на встроенный язык 1С, но с расширенными возможностями для системного администрирования.
Разберем по шагам, как настроить управление через этот инструмент. Прежде всего, важно понимать, что для работы подобных скриптов на сервере 1С должна быть запущена служба RAS (Remote Administration Service). Именно она выступает «прослойкой», принимающей команды от API и передающей их кластеру. Для упрощения развертывания среды можно использовать готовый сценарий python для автоматизации установки службы RAS и сервера 1С в среде Astra Linux.
Проанализируем пример кода на 1С:Исполнителе, который позволяет подключиться к кластеру, найти нужную базу и установить в ней время начала и окончания блокировки сеансов. Посмотрите на следующую структуру кода:
структура Подключение
знч Сервер: Строка
знч ПользовательКластера: Строка
знч ПарольКластера: Строка
знч ИмяБазы: Строка
знч ПользовательБазы: Строка
знч ПарольПользователяБазы: Строка
;
метод ЗаблокироватьБазу(Параметры: Подключение)
// Инициализируем объект администрирования. Порт 1545 — стандартный для RAS
знч АдмС = новый АдминистрированиеСервераV8(Параметры.Сервер, 1545)
знч Кластеры = АдмС.ПолучитьКластеры()
для Кластер из Кластеры
Кластер.ВыполнитьАутентификацию(Параметры.ПользовательКластера, Параметры.ПарольКластера)
знч Базы = Кластер.ПолучитьИнфобазы()
для База из Базы
если База.Имя == Параметры.ИмяБазы
// Проходим авторизацию в конкретной информационной базе
пер Инфобаза = База.ВыполнитьАутентификацию(Параметры.ПользовательБазы, Параметры.ПарольПользователяБазы)
// Настраиваем параметры блокировки
знч ЧасовойПояс = новый ЧасовойПояс("UTC+3")
Инфобаза.ВремяНачалаБлокировки = ДатаВремя.Сейчас().НачалоДня().ДобавитьМинуты(570).ВМомент(ЧасовойПояс)
Инфобаза.ВремяОкончанияБлокировки = ДатаВремя.Сейчас().НачалоДня().ДобавитьМинуты(630).ВМомент(ЧасовойПояс)
Инфобаза.ВключенаБлокировкаНачалаСеансов = Истина
Инфобаза.Записать()
;
;
прервать // Если нашли нужный кластер и базу, завершаем цикл
;
;
В данном примере мы используем объект АдминистрированиеСервераV8, который является частью стандартной библиотеки 1С:Исполнителя. Обратите внимание на использование типов знч (неизменяемое значение) и пер (переменная), что характерно для синтаксиса этого инструмента. Мы устанавливаем время начала блокировки на 9:30 утра (570 минут от начала дня) и окончания на 10:30 утра (630 минут), обеспечивая технологическое окно для обслуживания.
Если ваша инфраструктура использует платформу версии 8.3.24 или выше, мы можем воспользоваться встроенным HTTP API. Это долгожданный функционал, который позволяет управлять кластером с помощью стандартных HTTP-запросов и JSON без необходимости написания скриптов на специфических языках 1С.
Выясним основные преимущества этого подхода:
curl.Для активации этого API на сервере необходимо настроить публикацию интерфейса администрирования. После этого вы сможете выполнять запросы вида PATCH или POST к ресурсу информационной базы, изменяя параметры sessionsDenial (блокировка начала сеансов) и scheduledJobsDenial (блокировка регламентных заданий).
Если разработка полноценного скрипта кажется избыточной, разберем более простой вариант — использование консольной утилиты rac.exe (в Linux — rac). Это клиентская часть для службы RAS.
Рассмотрим пример команды для блокировки начала сеансов в информационной базе:
rac infobase --auth update --cluster=<ID-кластера> --infobase=<ID-базы> --infobase-user=<Имя> --infobase-pwd=<Пароль> --sessions-denied=on --denial-from="2023-10-27T09:30:00" --denial-to="2023-10-27T10:30:00"
Этот метод идеально подходит для системных администраторов, так как позволяет интегрировать команды управления 1С в существующие скрипты автоматизации через командную строку Windows (bat-файлы) или планировщики задач. Также данный способ часто применяется, когда требуется установка и снятие блокировок у БД на сервере под Linux. С помощью rac можно не только блокировать базу, но и принудительно завершать сеансы пользователей (команда session terminate).
Многие задаются вопросом: можно ли управлять кластером напрямую через SQL? Проанализируем эту ситуацию. Настройки кластера (список баз, администраторы, параметры блокировок) хранятся в файлах .lst на уровне сервера приложений 1С, поэтому напрямую через SQL изменить настройки кластера нельзя.
Однако через SQL можно эффективно управлять подключениями к самой базе данных на уровне СУБД. Например, если база «зависла» и стандартные средства 1С не помогают, мы можем применить команду ALTER DATABASE:
-- Перевод базы в режим одного пользователя с немедленным разрывом всех соединений
ALTER DATABASE [ИмяБазы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- Возврат в многопользовательский режим после обслуживания
ALTER DATABASE [ИмяБазы] SET MULTI_USER;
Важно: Этот метод следует использовать только в крайних случаях, так как он не уведомляет сервер 1С о разрыве соединений, что может привести к временным ошибкам в кэше кластера.
Подведем итог и выясним, какой метод выбрать в зависимости от ситуации:
Независимо от выбранного способа, помните о безопасности: при использовании службы RAS желательно настраивать TLS-шифрование, чтобы пароли администраторов не передавались по сети в открытом виде.