Утилита rac: управление кластером 1С из командной строки
Москва, Щёлковское шоссе, д. 92, корп. 7 · Пн–Пт 9:00–19:00 · +7 903 729-62-41

Утилита rac: управление кластером серверов 1С из командной строки

Утилита rac: управление кластером серверов 1С из командной строки

Утилита rac: назначение и возможности

Утилита rac (Remote Administration Client) — это инструмент командной строки для управления кластером серверов 1С:Предприятие 8.3. Она общается с сервером администрирования ras (Remote Administration Server) и умеет ровно то же, что и консоль администрирования (MMC snap-in), — только из командной строки.

Преимущества rac перед графической консолью:

  • Автоматизация — скрипты для массовых операций (отключение сеансов, перезапуск процессов); а к данным самих информационных баз ИИ-агент подключается через MCP-сервер для 1С
  • Мониторинг — интеграция с Zabbix, Prometheus, Telegram-ботами
  • Удалённое управление — работа через SSH без RDP-сессии
  • Скорость — быстрее графического интерфейса для рутинных операций

Утилита rac находится в каталоге установки платформы: C:\Program Files\1cv8\8.3.XX.YYYY\bin\rac.exe (Windows) или /opt/1cv8/x86_64/8.3.XX.YYYY/rac (Linux).

Запуск службы ras

Перед использованием rac убедитесь, что служба ras запущена на сервере 1С:

# Linux: проверка службы ras
systemctl status srv1cv83
# ras запускается вместе с ragent

# Если ras не запущен отдельно — запустите вручную
/opt/1cv8/x86_64/8.3.25.1257/ras cluster --port=1545

# Windows: проверка
sc query "1C:Enterprise 8.3 Server Agent"

# Проверка доступности ras
rac cluster list localhost:1545

По умолчанию ras слушает на порту 1545. Если настроен другой порт, укажите его явно во всех командах.

Управление кластерами

Кластер в архитектуре сервера 1С — это, можно сказать, самый верхний уровень иерархии. Хотя один сервер теоретически способен держать несколько кластеров, на моей практике чаще всего он всё-таки один.

Основные команды для кластеров

Команды для просмотра кластеров и управления ими:

# Список кластеров
rac cluster list localhost:1545
# cluster          : a1b2c3d4-e5f6-7890-abcd-ef1234567890
# host             : server1c
# port             : 1541
# name             : "Основной кластер"
# expiration-timeout : 0
# lifetime-limit   : 0
# security-level   : 0

# Информация о конкретном кластере
rac cluster info \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  localhost:1545

# Изменение параметров кластера
# (время жизни сеанса, таймауты, безопасность)
rac cluster update \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --expiration-timeout=600 \
  --security-level=1 \
  localhost:1545

Параметр --security-level: 0 — без авторизации, 1 — авторизация пользователя, 2 — авторизация пользователя и приложения. Для production рекомендуется security-level=1 с установленным паролем администратора кластера.

Мониторинг сеансов и подключений

Когда я работаю с rac, управление сеансами пользователей становится, пожалуй, моей самой частой задачей. Мы с вами можем просматривать активные сеансы, принудительно отключать те, что зависли, и, конечно, анализировать нагрузку.

Просмотр сеансов

Команды для анализа текущих сеансов:

# Все сеансы кластера
rac session list \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  localhost:1545

# Сеансы конкретной информационной базы
rac session list \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --infobase=11223344-5566-7788-99aa-bbccddeeff00 \
  localhost:1545

# Вывод содержит:
# session          : aaaa-bbbb-cccc-dddd
# user-name        : Иванов
# host             : WS-IVANOV
# app-id           : 1CV8C   (тонкий клиент)
# started-at       : 2024-04-08T09:15:00
# last-active-at   : 2024-04-08T14:23:00
# calls            : 1547
# duration-current : 0
# memory-current   : 125000000
# memory-total     : 890000000

Поле app-id показывает тип клиента: 1CV8C — тонкий клиент, 1CV8 — толстый клиент, WebClient — веб-клиент, BackgroundJob — фоновое задание, Designer — конфигуратор.

Принудительное завершение сеансов

Перед обновлением конфигурации или в аварийной ситуации пользователей надо отключить:

# Завершение конкретного сеанса
rac session terminate \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --session=aaaa-bbbb-cccc-dddd \
  localhost:1545

# Если кластер с авторизацией:
rac session terminate \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --cluster-user=admin --cluster-pwd=ClusterPass \
  --session=aaaa-bbbb-cccc-dddd \
  localhost:1545

Для массового отключения всех сеансов базы удобнее использовать скрипт (см. далее).

Управление информационными базами

С помощью rac я могу легко просматривать список доступных баз, управлять различными блокировками и гибко настраивать параметры подключений.

Список баз и их параметры

Просмотр зарегистрированных информационных баз:

# Список всех баз кластера
rac infobase summary list \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  localhost:1545

# Подробная информация о базе
rac infobase info \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --infobase=11223344-5566-7788-99aa-bbccddeeff00 \
  --infobase-user=admin --infobase-pwd=AdminPass \
  localhost:1545

# Вывод содержит:
# infobase            : 11223344-5566-7788-99aa-bbccddeeff00
# name                : "Бухгалтерия"
# dbms                : MSSQLServer
# db-server           : sql-server
# db-name             : buh_main
# sessions-deny       : off
# scheduled-jobs-deny : off
# date-offset         : 2000

Блокировка начала сеансов

Для обслуживания базы (обновление, тестирование) необходимо заблокировать новые подключения:

# Установка блокировки сеансов с сообщением
rac infobase update \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --infobase=11223344-5566-7788-99aa-bbccddeeff00 \
  --infobase-user=admin --infobase-pwd=AdminPass \
  --sessions-deny=on \
  --denied-message="Ведутся технические работы. Ориентировочное время завершения: 18:00" \
  --permission-code="secret123" \
  localhost:1545

# Снятие блокировки
rac infobase update \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --infobase=11223344-5566-7788-99aa-bbccddeeff00 \
  --infobase-user=admin --infobase-pwd=AdminPass \
  --sessions-deny=off \
  localhost:1545

# Блокировка регламентных заданий
rac infobase update \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --infobase=11223344-5566-7788-99aa-bbccddeeff00 \
  --infobase-user=admin --infobase-pwd=AdminPass \
  --scheduled-jobs-deny=on \
  localhost:1545

Параметр --permission-code позволяет администратору подключаться к заблокированной базе, указав код разрешения в параметрах запуска 1С.

Мониторинг рабочих процессов

Рабочие процессы (rphost) — ключевой компонент сервера 1С, который напрямую обслуживает клиентские подключения. Следить за их состоянием критично для стабильности.

Просмотр и управление процессами

Команды для анализа рабочих процессов:

# Список рабочих процессов
rac process list \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  localhost:1545

# Вывод:
# process          : pppp-qqqq-rrrr-ssss
# host             : server1c
# port             : 1560
# pid              : 12345
# is-enable        : yes
# running          : yes
# started-at       : 2024-04-01T00:00:00
# use              : used
# available-perfomance : 100
# capacity          : 1000
# connections       : 45
# memory-size       : 2500000000  (2.5 ГБ)
# memory-excess-time : 0

# Информация о конкретном процессе
rac process info \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --process=pppp-qqqq-rrrr-ssss \
  localhost:1545

Критичные параметры для мониторинга: memory-size (потребление памяти — при превышении лимита процесс перезапускается), connections (число подключений), available-perfomance (доступная производительность, 100 = свободен).

Скрипты автоматизации на bash/PowerShell

Rac легко вписывается в скрипты для автоматизации рутины. Разберём пару полезных для ежедневного администрирования.

Типы клиентов в активных сеансах кластера 1С: тонкий клиент, толстый клиент, веб-клиент, фоновое задание, конфигуратор
Распределение типов клиентов в активных сеансах кластера 1С.

Bash: отключение всех сеансов базы

Скрипт для Linux — отключает все сеансы указанной базы:

#!/bin/bash
# disconnect_all.sh — отключение всех сеансов базы
RAC="/opt/1cv8/x86_64/8.3.25.1257/rac"
SERVER="localhost:1545"
CLUSTER_USER="admin"
CLUSTER_PWD="ClusterPass"

# Получаем ID кластера
CLUSTER_ID=$($RAC cluster list $SERVER | grep '^cluster' | awk '{print $3}')
echo "Cluster: $CLUSTER_ID"

# Получаем ID базы по имени
INFOBASE_NAME="Бухгалтерия"
INFOBASE_ID=$($RAC infobase summary list \
  --cluster=$CLUSTER_ID $SERVER | \
  grep -B1 "$INFOBASE_NAME" | grep '^infobase' | awk '{print $3}')
echo "Infobase: $INFOBASE_ID"

# Получаем список сеансов
SESSIONS=$($RAC session list \
  --cluster=$CLUSTER_ID \
  --cluster-user=$CLUSTER_USER --cluster-pwd=$CLUSTER_PWD \
  --infobase=$INFOBASE_ID $SERVER | \
  grep '^session' | awk '{print $3}')

# Завершаем каждый сеанс
COUNT=0
for SID in $SESSIONS; do
  $RAC session terminate \
    --cluster=$CLUSTER_ID \
    --cluster-user=$CLUSTER_USER --cluster-pwd=$CLUSTER_PWD \
    --session=$SID $SERVER
  echo "Завершён сеанс: $SID"
  COUNT=$((COUNT + 1))
done
echo "Завершено сеансов: $COUNT"

PowerShell: мониторинг сеансов с уведомлением

Скрипт для Windows — мониторинг числа сеансов и потребления памяти:

# Monitor-1CCluster.ps1
$racPath = "C:\Program Files\1cv8\8.3.25.1257\bin\rac.exe"
$server = "localhost:1545"
$memoryThresholdGB = 4
$sessionThreshold = 100

# Парсинг вывода rac в объекты
function Parse-RacOutput($output) {
    $objects = @()
    $current = @{}
    foreach ($line in $output) {
        if ($line -match '^(\S.+?)\s*:\s*(.*)$') {
            $current[$matches[1].Trim()] = $matches[2].Trim()
        }
        elseif ($line -eq '' -and $current.Count -gt 0) {
            $objects += [PSCustomObject]$current
            $current = @{}
        }
    }
    if ($current.Count -gt 0) { $objects += [PSCustomObject]$current }
    return $objects
}

# Получаем ID кластера
$clusterOutput = & $racPath cluster list $server
$clusters = Parse-RacOutput $clusterOutput
$clusterId = $clusters[0].cluster

# Проверяем рабочие процессы
$processOutput = & $racPath process list --cluster=$clusterId $server
$processes = Parse-RacOutput $processOutput

$alerts = @()
foreach ($proc in $processes) {
    $memGB = [math]::Round([long]$proc.'memory-size' / 1GB, 2)
    $conns = [int]$proc.connections
    if ($memGB -gt $memoryThresholdGB) {
        $alerts += "Процесс PID $($proc.pid): память $memGB ГБ (порог $memoryThresholdGB ГБ)"
    }
}

# Проверяем число сеансов
$sessionOutput = & $racPath session list --cluster=$clusterId $server
$sessions = Parse-RacOutput $sessionOutput
if ($sessions.Count -gt $sessionThreshold) {
    $alerts += "Всего сеансов: $($sessions.Count) (порог $sessionThreshold)"
}

if ($alerts.Count -gt 0) {
    $body = "Сервер 1С: $env:COMPUTERNAME`n" + ($alerts -join "`n")
    Send-MailMessage -From "1c-monitor@example.com" -To "admin@example.com" `
        -Subject "[1С ALERT] Проблемы на $env:COMPUTERNAME" `
        -Body $body -SmtpServer "mail.example.com" -Encoding UTF8
}

Анализ блокировок и проблем производительности

Rac позволяет диагностировать блокировки и конфликты, которые приводят к зависаниям пользователей.

Просмотр текущих блокировок

Команды для анализа блокировок и подключений:

# Список текущих блокировок
rac lock list \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --infobase=11223344-5566-7788-99aa-bbccddeeff00 \
  --cluster-user=admin --cluster-pwd=ClusterPass \
  localhost:1545

# Вывод:
# lock             : llll-mmmm-nnnn-oooo
# session          : aaaa-bbbb-cccc-dddd
# object           : "РегистрСведений.КурсыВалют"
# locked           : "Exclusive"
# lock-waiting     : 0

# Список подключений (более детально чем сеансы)
rac connection list \
  --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --infobase=11223344-5566-7788-99aa-bbccddeeff00 \
  localhost:1545

# Вывод показывает:
# connection       : conn-id
# process          : process-id (к какому rphost привязано)
# infobase         : infobase-id
# session          : session-id
# blocked-by-dbms  : 0  (блокировка на уровне СУБД)
# blocked-by-ls    : 0  (блокировка менеджера блокировок 1С)

Если blocked-by-ls > 0, пользователь ждёт снятия управляемой блокировки 1С. Если blocked-by-dbms > 0, блокировка на уровне SQL Server / PostgreSQL — нужно анализировать запросы СУБД.

Интеграция с системами мониторинга

Вывод rac легко парсится для интеграции с Zabbix, Grafana или Telegram-ботами.

Скрипт для Zabbix

Пример UserParameter для Zabbix Agent — мониторинг числа сеансов и памяти:

# /etc/zabbix/zabbix_agentd.d/1c_monitoring.conf
UserParameter=1c.sessions.count,/opt/1cv8/x86_64/8.3.25.1257/rac session list --cluster=$(rac cluster list localhost:1545 | grep '^cluster' | awk '{print $3}') localhost:1545 | grep -c '^session'
UserParameter=1c.process.memory[*],/opt/scripts/1c_process_memory.sh $1

# /opt/scripts/1c_process_memory.sh
#!/bin/bash
RAC="/opt/1cv8/x86_64/8.3.25.1257/rac"
CLUSTER=$($RAC cluster list localhost:1545 | grep '^cluster' | awk '{print $3}')
$RAC process list --cluster=$CLUSTER localhost:1545 | \
  grep 'memory-size' | awk '{sum += $3} END {print sum}'

В Zabbix создайте Items: 1c.sessions.count (число сеансов) и 1c.process.memory (суммарная память рабочих процессов). Настройте Triggers: при числе сеансов > 150 или памяти > 8 ГБ — отправка уведомления.

Часто задаваемые вопросы

По сути, если говорить о функционале, то rac и графическая консоль (та самая MMC snap-in) абсолютно эквивалентны. Обе они подключаются к службе ras и выполняют одни и те же операции. Но вот в чём, на мой взгляд, главное преимущество rac: это, конечно, возможность автоматизации с помощью скриптов, удобная работа через SSH без всякого графического интерфейса и, что немаловажно, парсинг вывода для мониторинга. А вот консоль, не спорю, куда удобнее для интерактивной работы и, безусловно, визуального анализа.

Укажите адрес сервера вместо localhost: rac cluster list server1c.example.com:1545. Убедитесь, что порт 1545 (ras) открыт в firewall между вашей машиной и сервером 1С. Версия rac должна совпадать с версией платформы на сервере (или быть совместимой — minor version может отличаться).

Пароль администратора кластера мы обычно задаём, когда впервые настраиваем систему через консоль администрирования. Но что делать, если вдруг пароль потерялся? Не беда, его можно сбросить! Просто остановите службу ragent, затем удалите файл 1CV8Clst.lst, который находится в каталоге кластера, и снова запустите службу. После этого кластер пересоздастся уже без пароля. Только, пожалуйста, учтите один важный момент: при такой операции вы потеряете всю конфигурацию кластера, то есть список баз и настройки серверов, но сами базы в СУБД при этом останутся абсолютно целыми.

Rac не выполняет обновление конфигурации (загрузку cf-файла) — для этого используется утилита ibcmd или запуск конфигуратора в пакетном режиме: 1cv8 DESIGNER /S server\base /LoadCfg update.cf /UpdateDBCfg. Через rac можно автоматизировать подготовительные шаги: заблокировать базу (sessions-deny=on), завершить все сеансы, а после обновления — снять блокировку.

Для просмотра фоновых заданий используйте сеансы с типом BackgroundJob: rac session list --cluster=ID server:1545 и отфильтруйте по полю app-id=BackgroundJob. Для блокировки/разблокировки регламентных заданий: rac infobase update --scheduled-jobs-deny=on/off. Детальный мониторинг (конкретные задания, ошибки) доступен только через запросы к базе данных или технологический журнал 1С.

#rac 1С#управление кластером 1С#сервер 1С командная строка#мониторинг 1С#сеансы 1С#рабочие процессы 1С#ras rac#администрирование кластера 1С

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

Комментарии 0

Оставить комментарий

загрузка...
📄
Скачайте подробный разбор в PDF Кейсы, статистика, типовые ошибки и чек-лист самопроверки — 12 страниц
Скачать PDF

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Письмо придёт в течение минутыНе нашли его во «Входящих» — загляните в папку «Спам» или «Промоакции» и нажмите «Не спам». Так все следующие выпуски будут приходить прямо в основную почту.
Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.