Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

1C_RAC_SESSION_AUTOMATION 1С:Предприятие и СУБД

Автоматизация управления сеансами и блокировками 1С через скрипты RAC

Обновлено: 26.08.2026 · Официальная документация ↗
  • Невозможно выполнить монопольное резервное копирование базы данных из-за неудаленных пользовательских сеансов.
  • Зависшие фоновые задания блокируют таблицы СУБД и потребляют память.
  • Необходимость регламентной установки блокировки регламентных заданий (Scheduled Jobs Lock) перед ночным ТО.

1. Архитектура скриптового управления через RAC

Утилита rac позволяет полностью автоматизировать жизненный цикл информационных баз без использования графического интерфейса. Скрипты могут выполняться планировщиком Cron или CI/CD агентами (GitLab Runner, Jenkins).

2. Bash-скрипт: Блокировка соединений и сброс активных сеансов

Создайте скрипт /opt/scripts/1c_lock_and_kill.sh:

#!/usr/bin/env bash
set -euo pipefail

RAS_HOST="localhost:1545"
CLUSTER_ID="4c38d5e8-1111-2222-3333-555566667777"
INFOBASE_NAME="trade_production"
ADMIN_USER="Admin"
ADMIN_PWD="StrongPass"

# 1. Получение ID информационной базы
INFOBASE_ID=$(rac infobase --cluster="$CLUSTER_ID" summary list "$RAS_HOST" | \
  awk -v name="$INFOBASE_NAME" '$1=="infobase" {id=$3} $1=="name" && $3==name {print id}')

echo "Найдена база $INFOBASE_NAME с ID: $INFOBASE_ID"

# 2. Установка блокировки начала сеансов и регламентных заданий
rac infobase --cluster="$CLUSTER_ID" update \
  --infobase="$INFOBASE_ID" \
  --infobase-user="$ADMIN_USER" --infobase-pwd="$ADMIN_PWD" \
  --sessions-denied=on \
  --scheduled-jobs-denied=on \
  --denied-message="База заблокирована на регламентное обслуживание до 06:00" \
  --permission-code="BackupPass" \
  "$RAS_HOST"

echo "Блокировка сеансов успешно включена."

# 3. Принудительное завершение всех открытых пользовательских сеансов
rac session --cluster="$CLUSTER_ID" summary list "$RAS_HOST" | \
  awk -v base_id="$INFOBASE_ID" '$1=="session" {sid=$3} $1=="infobase" && $3==base_id {print sid}' | \
  while read -r SESSION_ID; do
    echo "Завершение сеанса: $SESSION_ID"
    rac session --cluster="$CLUSTER_ID" terminate --session="$SESSION_ID" "$RAS_HOST" || true
done

echo "Все активные сеансы завершены."

3. Bash-скрипт: Снятие блокировки соединений

#!/usr/bin/env bash
# Снятие блокировки после завершения бэкапа
rac infobase --cluster="$CLUSTER_ID" update \
  --infobase="$INFOBASE_ID" \
  --infobase-user="$ADMIN_USER" --infobase-pwd="$ADMIN_PWD" \
  --sessions-denied=off \
  --scheduled-jobs-denied=off \
  "$RAS_HOST"

echo "Блокировка базы успешно снята."

4. Назначение прав и запуск по расписанию в Cron

chmod +x /opt/scripts/1c_lock_and_kill.sh
# Добавление в /etc/crontab (запуск в 23:00)
0 23 * * * usr1cv8 /opt/scripts/1c_lock_and_kill.sh >> /var/log/1c_maint.log 2>&1
💡 Практика специалистов: При написании скриптов всегда используйте связку флагов --infobase-user и --infobase-pwd. Если в базе заведен хотя бы один пользователь с административными правами, RAC без указания учетных данных вернет ошибку доступа.

Частые вопросы (FAQ)

Что такое Permission Code (код разрешения) при блокировке?

Код разрешения (/UC ключ) позволяет администратору или скрипту бэкапа подключиться к заблокированной информационной базе, передав параметр строки запуска /UC<КодРазрешения>.

Чем отличается session terminate от connection terminate?

Session terminate завершает логический сеанс пользователя на сервере 1С с корректным освобождением лицензии. Connection terminate разрывает физический TCP-сокет рабочего процесса.

Как автоматически удалить только зависшие (неактивные) сеансы?

В выводе команды rac session list анализируйте параметры idle-time (время бездействия) и last-active-time, фильтруя завершение сеансов только с idle-time > 3600 сек.

Можно ли отключить регламентные задания без блокировки входа пользователей?

Да, флаги независимы. Для отключения фоновых задач укажите параметр --scheduled-jobs-denied=on, оставив --sessions-denied=off.

Полезные материалы
Рекомендуем