Прописываем debug в службу агента сервера 1С и проверяем, что отладка работает
Содержание
Чтобы включить отладку на сервере 1С 8.3, допишите ключ -debug в строку запуска службы агента сервера (ragent.exe) и перезапустите службу. В Windows эта строка хранится в параметре ImagePath раздела службы в реестре, в Linux — в unit-файле systemd. Галочки «включить отладку» в консоли администрирования нет, и искать её там бесполезно.
Частое заблуждение — что отладку «прописывают» в каждой базе или в настройках кластера. Нет: ключ действует на весь сервер, на все его рабочие процессы и все базы кластера. Поэтому включают его осознанно, на время, и лучше в нерабочие часы.
Как устроен сервер 1С и где живёт режим отладки
Сервер 1С:Предприятия — это три типа процессов. Порядок у них жёсткий, от него зависит, куда прописывать debug.
- 🧩
ragent— агент сервера. Слушает порт 1540, запускается как служба и порождает остальные процессы. - 🗂
rmngr— менеджер кластера, по умолчанию порт 1541. Хранит реестр кластера в каталогеsrvinfo\reg_1541. - ⚙️
rphost— рабочие процессы. В них выполняется серверный код конфигурации. Их порты берутся из диапазона, заданного в свойствах рабочего сервера (по умолчанию 1560–1591).
Ключ -debug передаётся агенту. Агент запускает менеджер и рабочие процессы уже в режиме отладки. Отдельно прописывать что-то для rphost не нужно.
Отладку часто путают с логированием. Это три разных механизма:
| Механизм | Что даёт | Где включается |
|---|---|---|
Режим отладки (-debug) | Точки останова и пошаговое выполнение серверного кода | Строка запуска ragent |
| Технологический журнал | Подробные события платформы: исключения, блокировки, долгие вызовы | Файл logcfg.xml |
| Журнал регистрации | Действия пользователей и прикладные события базы | Конфигуратор или клиент, для каждой базы |
💡 В инструкциях иногда встречается «журнал dbgras». Такого файла у платформы нет. Есть dbgs — сервер отладки для протокола HTTP — и ras — сервер администрирования. Журнал отладки ни тот, ни другой не пишет.
Перед тем как включать отладку на сервере 1С
Пять пунктов, которые лучше сверить до правки реестра:
- Узнайте точное имя службы агента. В
services.mscона обычно называется «Агент сервера 1С:Предприятия 8.3 (x86-64)», а внутреннее имя похоже на1C:Enterprise 8.3 Server Agent (x86-64). Если на сервере стоит несколько версий платформы, служб тоже несколько. - Выберите время. Перезапуск службы агента обрывает все сеансы пользователей на этом сервере — несохранённые документы пропадут. Предупредите людей или дождитесь вечера.
- Определите протокол. По умолчанию отладка идёт по TCP/IP. Протокол HTTP нужен, если отлаживаете через межсетевой экран или хотите отлаживать фоновые задания и сеансы, запущенные не вами.
- Проверьте порты. Для TCP отладчик ходит к рабочим процессам по их диапазону, для HTTP — к серверу отладки, по умолчанию на порт 1550.
- Сохраните исходную строку
ImagePathв текстовый файл. Если что-то пойдёт не так, вернёте её за минуту.
Не включайте отладку на боевом сервере «на постоянку». Режим добавляет нагрузку на рабочие процессы, а подключиться отладчиком сможет любой, у кого есть доступ к портам и права в базе.
Прописываем ключ -debug в службу Windows
Способ 1. Через редактор реестра
- Запустите
regeditот имени администратора. - Откройте раздел
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. - Найдите подраздел службы агента — например,
1C:Enterprise 8.3 Server Agent (x86-64). - Откройте параметр
ImagePath. - Допишите
-debugпосле-agentили в конец строки, через пробел. - Перезапустите службу в
services.msc.
Строка до правки выглядит примерно так:
"C:\Program Files\1cv8\8.3.24.1342\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
После правки:
"C:\Program Files\1cv8\8.3.24.1342\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d "C:\Program Files\1cv8\srvinfo"
Номер платформы, порты и каталог у вас свои. Меняйте только добавлением ключа, остальное не трогайте.
Для отладки по HTTP пишут -debug -http. Явное -debug -tcp равносильно просто -debug.
Способ 2. Командой sc config
Тот же результат без реестра. Командная строка — от администратора:
sc qc "1C:Enterprise 8.3 Server Agent (x86-64)"
sc config "1C:Enterprise 8.3 Server Agent (x86-64)" binPath= "\"C:\Program Files\1cv8\8.3.24.1342\bin\ragent.exe\" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d \"C:\Program Files\1cv8\srvinfo\""
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"
Первая команда показывает текущую строку — скопируйте её и добавьте ключ. После binPath= обязателен пробел, а кавычки внутри пути экранируются обратной косой чертой.
Способ 3. Ручной запуск для проверки
Если служба не нужна, агент можно запустить в консоли — удобно на тестовом стенде:
"C:\Program Files\1cv8\8.3.24.1342\bin\ragent.exe" -agent -port 1540 -regport 1541 -range 1560:1591 -debug -d "C:\Program Files\1cv8\srvinfo"
Перед этим остановите службу с тем же каталогом srvinfo и портами. Два агента на одних портах не уживутся. Закрыли окно консоли — сервер остановлен.
💡 После обновления платформы установщик пересоздаёт службу, и -debug пропадает. Это нормальная причина, почему «вчера отладка работала, а сегодня нет».
Что умеют консоль администрирования и rac
В консоли администрирования серверов 1С отладку не включают — ни в свойствах кластера, ни в свойствах рабочего сервера такой настройки нет. Зато консоль нужна, чтобы проверить результат:
- 🔍 в узле «Рабочие процессы» должны появиться заново запущенные
rphostс новым временем старта; - 🔍 в свойствах рабочего сервера видно диапазон портов — он нужен для правил межсетевого экрана;
- 🔍 в «Сеансах» видно, кто ещё работает, перед тем как перезапускать службу.
Если удобнее командная строка, то же самое показывает утилита rac через сервер администрирования ras. Сначала запускают ras, затем:
ras cluster --port=1545 localhost:1540
rac localhost:1545 cluster list
rac localhost:1545 process list --cluster=<id_кластера>
Идентификатор кластера берите из вывода cluster list. Ключа, который включал бы отладку, у rac нет: она управляет кластером, а не строкой запуска агента. Полный список команд — rac help.
Отладка на сервере 1С под Linux
На Linux ключ тот же, меняется только место, где его прописывают.
Старые установки со скриптом /etc/init.d/srv1cv83. Параметры читаются из файла /etc/sysconfig/srv1cv83 (RHEL-подобные системы) или /etc/default/srv1cv83 (Debian, Ubuntu). В нём есть строка SRV1CV8_DEBUG. Поставьте SRV1CV8_DEBUG=1 и перезапустите службу:
sudo systemctl restart srv1cv83
Современные платформы с unit-файлом systemd. Службы называются по номеру версии, например srv1cv8-8.3.24.1342@default. Ключ добавляют через переопределение, не трогая файл из пакета:
systemctl cat srv1cv8-8.3.24.1342@default
sudo systemctl edit srv1cv8-8.3.24.1342@default
В открывшемся редакторе сначала пишут пустую строку ExecStart=, затем полную строку ExecStart= из вывода systemctl cat с добавленным -debug. Пустая строка сбрасывает исходную команду — без неё systemd ругнётся на два ExecStart. Затем:
sudo systemctl daemon-reload
sudo systemctl restart srv1cv8-8.3.24.1342@default
ps aux | grep ragent
В выводе ps у процесса ragent должен стоять ключ -debug. Если его нет — служба читает другой файл.
Подключаем конфигуратор к серверной отладке
Сервер готов, теперь к нему нужно подключить отладчик.
- В конфигураторе откройте
Сервис → Параметры → Отладкаи выберите тот же протокол, что на сервере: TCP/IP или HTTP. - Запустите базу из конфигуратора клавишей F5 — отладка сеанса подключится сама.
- Для серверных вызовов, фоновых и регламентных заданий откройте
Отладка → Подключение. В окне «Предметы отладки» нажмите «Автоматическое подключение» и отметьте нужные типы: серверный контекст, фоновое задание и т.д. - Поставьте точку останова в серверной процедуре (F9) и выполните действие в базе.
Если пользователь запускает базу сам, не из конфигуратора, разрешение отладки задают параметром запуска /DEBUG в свойствах базы, в поле дополнительных параметров. Для HTTP к нему добавляют адрес сервера отладки:
/DEBUG -http -attach /DEBUGGERURL "http://srv-1c:1550"
💡 Отлаживать по HTTP удобнее в команде: несколько разработчиков подключаются к одному серверу отладки, и для этого достаточно открыть один порт, а не весь диапазон рабочих процессов.
Логирование: технологический журнал и журнал регистрации
Режим отладки показывает, что происходит в коде прямо сейчас. Если нужна история — какие исключения были ночью, кто держал блокировку, — включают технологический журнал.
Технологический журнал через logcfg.xml
Файл logcfg.xml кладут в каталог conf платформы, например C:\Program Files\1cv8\conf\ (для версии — в bin\conf). Платформа перечитывает его сама, перезапуск службы не нужен. Минимальная настройка — только исключения:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="D:\1C_TechLog" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<property name="all"/>
</log>
</config>
Журнал пишется в подкаталоги по именам процессов (rphost_1234), файлы — по часам, формата ГГММДДЧЧ.log. Ищут в них обычно поиском по ключевому слову события (EXCP, TLOCK, TTIMEOUT) и по имени базы.
Ротация и очистка логов
| Что | Как ограничить | Чем рискуете без ограничения |
|---|---|---|
| Технологический журнал | Атрибут history у <log>, в часах. Старые файлы платформа удаляет сама | Заполненный диск за сутки при событиях <property name="all"/> без фильтра |
| Журнал регистрации | В конфигураторе Администрирование → Настройка журнала регистрации: уровень и кнопка сокращения журнала | Рост каталога 1Cv8Log базы на гигабайты |
| Дампы процессов | Элемент <dump> в logcfg.xml, отдельный каталог | Дампы рабочих процессов по сотне мегабайт каждый |
Пишите технологический журнал на отдельный диск, не на системный. Полный диск C: роняет и сервер 1С, и СУБД, если она на той же машине.
Когда диагностика закончена, удалите или переименуйте logcfg.xml и уберите -debug из строки запуска службы. Второе снова потребует перезапуска — снова с предупреждением пользователей.