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

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

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

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

  • Автоматизация — скрипты для массовых операций (отключение сеансов, перезапуск процессов)
  • Мониторинг — интеграция с 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 легко интегрируется в скрипты для автоматизации рутинных операций. Рассмотрим полезные скрипты для ежедневного администрирования.

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С.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

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

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

загрузка...