К статье
Практический материал

Администрирование · 11 мин

Отладка на сервере 1С 8.3 под Linux: включение debug и подключение

Как включить отладку на сервере 1С 8.3 под Linux: параметр -debug в srv1cv8, настройка агента, подключение конфигуратора, типичные ошибки и проверка результата.

Отладка серверного кода в клиент-серверном варианте 1С:Предприятие 8.3 выполняется не на клиенте, а на рабочем сервере, где исполняются процедуры с директивами «НаСервере» и «НаСервереБезКонтекста». Если агент сервера запущен без специального флага, конфигуратор просто не увидит серверные предметы отладки: точки останова в серверных модулях будут игнорироваться, а в списке подключения появятся только клиентские сеансы.

На Linux-платформе включение отладки сводится к запуску агента сервера (ragent) с параметром -debug и указанием порта для подключения отладчика. После этого конфигуратор с любой машины в сети сможет подключиться к серверным процедурам. Важно понимать, что режим отладки снижает производительность сервера и открывает дополнительный сетевой порт, поэтому на продуктивных системах его включают на ограниченное время или выносят отладку на тестовый контур.

Ниже разобраны конкретные шаги: как изменить параметры запуска службы, какие порты задействуются, как подключить конфигуратор и как проверить, что отладка действительно работает, а также типичные ошибки, из-за которых серверные точки останова «не срабатывают».

Как устроена отладка в клиент-серверном 1С и зачем нужен флаг -debug

В файловом варианте весь код исполняется в одном процессе, и конфигуратор отлаживает его напрямую. В клиент-серверном варианте серверный код выполняет рабочий процесс rphost на сервере приложений, а конфигуратор — отдельная программа, которая должна подключиться к этому процессу по сети через специальный протокол отладки.

По умолчанию агент сервера 1С запущен без поддержки отладки: протокол отладчика не инициализируется, и серверные предметы отладки недоступны. Параметр -debug при запуске ragent включает этот протокол и заставляет рабочие процессы принимать подключения отладчика.

Есть два режима отладки, которые выбираются параметром -debug: по протоколу TCP (классический, работает во всех версиях 8.3) и по протоколу HTTP (появился в более поздних версиях платформы и требует публикации отладчика через веб-сервер). Для большинства задач администрирования достаточно TCP-режима, его и рассмотрим как основной сценарий.

Подготовка: что проверить перед включением отладки

Перед изменением параметров службы убедитесь, что у вас есть права на перезапуск службы агента сервера (обычно root или sudo) и что вы понимаете, какой экземпляр кластера будете перенастраивать. Если на машине запущено несколько агентов с разными портами, менять нужно тот, который обслуживает нужную информационную базу.

Проверьте текущие параметры запуска: они видны в списке процессов. Это поможет не потерять существующие настройки (каталог кластера, порт агента, диапазон портов рабочих процессов) при редактировании.

bash
ps aux | grep ragent

Также заранее определите, откуда будет подключаться конфигуратор: с той же машины, из локальной сети или через VPN. От этого зависит, нужно ли открывать порты отладки в файрволе (firewalld, iptables или ufw) и не режет ли их сетевое оборудование.

Включение отладки: изменение параметров запуска агента

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

Вариант 1: systemd-юнит

Найдите юнит службы (обычно srv1cv8-*.service или похожее имя) и отредактируйте строку ExecStart, добавив к параметрам ragent флаг -debug. Удобнее использовать systemctl edit, чтобы переопределение сохранилось в отдельном файле и не затиралось при обновлении пакета.

bash
systemctl edit srv1cv8-8.3.22.1750.service

В секции переопределения укажите полную строку запуска, например:

bash
[Service]
ExecStart=
ExecStart=/opt/1cv8/x86_64/8.3.22.1750/ragent -daemon -port 1540 -regport 1541 -range 1560:1591 -d /var/lib/1cv8 -debug -debugPort 1550

Пустая строка ExecStart= перед новой командой обязательна: она сбрасывает исходное значение, иначе systemd попытается выполнить обе команды. После правки выполните systemctl daemon-reload и перезапустите службу.

Вариант 2: init-скрипт или ручной запуск

Если агент запускается скриптом, откройте файл скрипта (часто это /etc/init.d/srv1cv8 или скрипт в каталоге установки) и добавьте -debug к строке запуска ragent. При ручном запуске просто укажите флаг в командной строке:

bash
/opt/1cv8/x86_64/8.3.22.1750/ragent -daemon -port 1540 -regport 1541 -range 1560:1591 -d /var/lib/1cv8 -debug -debugPort 1550

Перезапуск службы и проверка, что отладка включилась

После изменения параметров перезапустите службу и убедитесь, что агент поднялся с новыми флагами. Проверка делается двумя способами: по списку процессов и по прослушиваемым портам.

Порядок действий
  1. 1
    Примените изменения: systemctl daemon-reload (для systemd)
  2. 2
    Перезапустите службу: systemctl restart srv1cv8-<версия>.service
  3. 3
    Проверьте статус: systemctl status srv1cv8-<версия>.service
  4. 4
    Убедитесь, что в ps aux процесс ragent запущен с флагом -debug
  5. 5
    Проверьте, что порт отладки слушается: ss -tlnp | grep 1550
  6. 6
    Откройте порт в файрволе, если конфигуратор подключается с другой машины

Если служба не стартует после правки, смотрите журнал: journalctl -u srv1cv8-*.service -n 50. Частая причина — синтаксическая ошибка в строке запуска или конфликт портов, когда выбранный -debugPort уже занят другим процессом.

Контрольные точки

Как проверить результат

Процесс ragent в ps aux
Норма

В командной строке виден флаг -debug

Тревожный признак

Флаг отсутствует — юнит не перечитан или правка внесена не в тот файл

Прослушивание порта отладки
Норма

ss -tlnp показывает порт 1550 (или ваш debugPort) в состоянии LISTEN

Тревожный признак

Порт не слушается — агент не стартовал с отладкой или упал

Доступность порта с машины конфигуратора
Норма

telnet/nc к серверу по порту отладки успешен

Тревожный признак

Таймаут — порт закрыт файрволом или недоступен по сети

Подключение конфигуратора к серверной отладке

На стороне разработчика откройте конфигуратор нужной информационной базы и перейдите в меню «Отладка → Подключение». Если база открыта через сервер 1С, конфигуратор обычно сам находит доступные предметы отладки; при необходимости укажите адрес сервера и порт отладки в настройках («Отладка → Параметры», раздел подключения).

В окне подключения отметьте нужные предметы отладки: «Сервер» для серверных вызовов, «Фоновое задание» для отладки регламентных и фоновых задач, при необходимости — клиентское приложение. После подключения поставьте точку останова в серверном модуле и выполните действие, которое вызывает этот код.

Для отладки фоновых заданий есть нюанс: задание стартует в отдельном сеансе, и конфигуратор должен успеть к нему подключиться. Включите в параметрах отладки автоматическое подключение новых предметов отладки нужных типов — тогда фоновые задания будут подхватываться при старте.

Если серверная точка останова не срабатывает, первым делом проверьте, что код действительно исполняется на сервере (директива &НаСервере), а не кэширован на клиенте, и что в окне подключения подключён именно предмет отладки «Сервер», а не только клиентское приложение.
ПЗ
Практическое замечание

Типичные ошибки и их признаки

Типичные ошибки
01
Забыли systemctl daemon-reload после правки юнита — служба перезапущена, но со старыми параметрами, флаг -debug не применился
02
Отладка включена, но порт debugPort закрыт файрволом — конфигуратор не видит серверные предметы отладки с другой машины
03
Перепутаны порты: в конфигураторе указан порт агента (1540) вместо порта отладчика — подключение не устанавливается
04
Точка останова стоит в клиентском модуле, а код исполняется на сервере (или наоборот) — останов не происходит
05
Отладка включена на одном агенте, а база обслуживается другим экземпляром кластера на той же машине
06
Оставили -debug включённым на продуктиве надолго — деградация производительности и лишний открытый порт

Отдельная группа проблем связана с версиями платформы: конфигуратор и сервер должны быть совместимых версий 8.3. Значительное расхождение версий может приводить к тому, что предметы отладки видны, но подключение обрывается или ведёт себя нестабильно.

Если сервер работает за NAT или в контейнере, убедитесь, что порт отладки проброшен наружу и что конфигуратор обращается по адресу, на котором агент реально слушает (проверьте, не привязан ли ragent только к localhost).

Ограничения и безопасная эксплуатация

Режим отладки — это инструмент разработки и диагностики, а не постоянный режим работы. Он добавляет накладные расходы на исполнение серверного кода и открывает сетевой интерфейс, через который подключившийся отладчик может читать данные и выполнять код в контексте сервера. Доступ к порту отладки следует ограничивать файрволом только адресами машин разработчиков.

Для регулярной диагностики продуктивных проблем безопаснее поднимать копию базы на тестовом сервере и включать отладку там. Если отладка на продуктиве неизбежна (например, ошибка воспроизводится только на реальных данных), включайте её на минимально необходимое время и выключайте сразу после сбора информации.

Маршрут решения

Как выбрать действие

Ошибка воспроизводится на тестовой копииВключайте отладку на тестовом сервере, продуктив не трогайте
Ошибка только на продуктиве, есть технологическое окноВключите -debug на продуктиве на время окна, ограничьте доступ к порту файрволом, после диагностики отключите
Нужно отладить фоновое заданиеВключите автоподключение предметов отладки типа «Фоновое задание» в параметрах конфигуратора
Конфигуратор не видит серверные предметы отладкиПроверьте флаг -debug в ps aux, прослушивание debugPort и доступность порта по сети

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

Можно ли включить отладку без перезапуска сервера 1С?

Нет. Флаг -debug считывается агентом при старте, поэтому перезапуск службы обязателен. Чтобы снизить влияние на пользователей, планируйте перезапуск на время минимальной нагрузки и заранее предупреждайте о разрыве сеансов.

Какой порт используется для отладки, если не указывать -debugPort?

Платформа выделяет порт из своего стандартного диапазона автоматически, и он может меняться между запусками. Для стабильной работы рекомендуется явно задавать -debugPort и открывать именно этот порт в файрволе.

Почему точка останова в серверной процедуре не срабатывает?

Наиболее частые причины: агент запущен без -debug, в окне подключения не отмечен предмет отладки «Сервер», код фактически исполняется на клиенте, либо вызов кэширован и серверная процедура не вызывается повторно. Проверяйте в указанном порядке.

Как отладить фоновое или регламентное задание?

В параметрах отладки конфигуратора включите автоматическое подключение предметов отладки типа «Фоновое задание». Тогда при старте задания конфигуратор подключится к его сеансу, и точки останова в коде задания сработают.

Опасно ли оставлять режим отладки включённым постоянно?

Да. Помимо снижения производительности, порт отладки — это канал, через который подключившийся может исполнять код на сервере. Ограничивайте доступ файрволом и отключайте -debug после завершения диагностики.

Чем отличается отладка по HTTP от классической по TCP?

HTTP-отладка работает через веб-сервер и удобна, когда прямой доступ к портам сервера закрыт, но требует дополнительной публикации и поддерживается только в поздних версиях платформы. TCP-режим проще в настройке и подходит для большинства сценариев внутри локальной сети.

Итог

Что важно запомнить

Отладка серверного кода 1С 8.3 на Linux включается флагом -debug при запуске ragent с перезапуском службы. Проверяйте результат по процессу и прослушиваемому порту, подключайтесь через «Отладка → Подключение» в конфигураторе, ограничивайте доступ к порту отладки и не оставляйте режим включённым на продуктиве дольше необходимого.