Не работает серверная отладка 1С на Linux: как правильно настроить systemd и протокол отладки?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переходе на новые версии платформы 1С:Предприятие (начиная с 8.3.21) и использовании современных дистрибутивов Linux (Ubuntu 22.04, Debian 10+ и др.) многие администраторы сталкиваются с тем, что привычные методы включения отладки перестают работать. В этой статье мы подробно разберем, почему старые инструкции с ИТС про "единичку" в конфиге могут не действовать, как правильно редактировать параметры службы systemd и почему в итоге стоит выбрать протокол HTTP.

Анализ ситуации: systemd против init.d

Рассмотрим исходную ситуацию. У нас есть сервер на базе Linux (например, Ubuntu 22.04) и установленная платформа 1С версии 8.3.26 или новее. Мы хотим включить возможность отладки серверного кода.

Частая ошибка возникает из-за устаревших знаний. Ранее, в дистрибутивах, использующих систему инициализации init.d (или скрипты в /etc/sysconfig на RHEL-подобных системах), для включения отладки использовалась переменная:

SRV1CV8_DEBUG=1

Скрипт запуска анализировал эту переменную: если она была равна "1", он самостоятельно добавлял ключ -debug к строке запуска процесса. Однако, начиная с версии 8.3.21, платформа 1С получила нативную поддержку systemd. Логика работы изменилась.

В unit-файлах systemd переменные окружения часто передаются в строку запуска "как есть". Если мы пропишем SRV1CV8_DEBUG=1, то команда запуска сервера может выглядеть как ragent ... 1, что приведет к ошибке запуска службы или игнорированию параметра, так как исполняемый файл ожидает конкретный ключ -debug.

Правильная настройка флагов отладки в systemd

Разберем, как корректно передать флаг отладки службе сервера 1С. Не рекомендуется редактировать файлы напрямую в /opt/1cv8/... или /lib/systemd/system/, так как эти изменения пропадут при обновлении платформы.

Мы будем использовать механизм "drop-in" (override) файлов systemd. Выполним следующие шаги:

  1. Определим имя службы. Обычно оно выглядит как srv1cv8-{версия}@.service.
  2. Вызовем редактор конфигурации systemd: systemctl edit srv1cv8-8.3.26.1498@default.service (Имя службы может отличаться в зависимости от вашей инсталляции, проверьте его командой systemctl list-units | grep 1c).
  3. В открывшемся редакторе добавим нужные переменные окружения. Здесь есть важный нюанс: мы должны передать именно сам ключ, а не "1".

Для включения отладки по протоколу TCP и HTTP пропишем:


[Service]
Environment=SRV1CV8_DEBUG=-debug

Если вы хотите явно указать использование TCP протокола (хотя это не всегда лучшее решение, о чем ниже), строка может выглядеть так:


[Service]
Environment=SRV1CV8_DEBUG=-debug -tcp

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


systemctl daemon-reload
systemctl restart srv1cv8-8.3.26.1498@default.service

Убедимся, что процесс запустился с нужными ключами. Выполним команду ps aux | grep 1c. В выводе мы должны увидеть процессы ragent, rmngr и rphost с флагом -debug.

Почему не работает отладка при запущенном сервере (Проблема TCP)

Даже если мы видим флаг -debug в списке процессов, точки останова могут не срабатывать, а в окне "Предметы отладки" конфигуратора мы можем не видеть серверных сеансов. Это распространенная проблема, с которой столкнулся и автор темы.

Причина: Стандартная отладка (TCP) требует, чтобы сервер 1С мог инициировать обратное подключение к компьютеру, где запущен Конфигуратор. Это часто блокируется из-за:

Решение: Переход на HTTP-отладку

Наиболее надежным решением, которое подтвердили участники обсуждения, является использование протокола HTTP для отладки. Этот протокол работает иначе: Конфигуратор сам обращается к серверу отладки, что снимает большинство проблем с сетевыми экранами и маршрутизацией.

Разберем алгоритм переключения на HTTP-отладку:

  1. Настройка сервера. Убедитесь, что в конфигурационном файле systemd (как мы делали выше) прописан просто ключ -debug (без -tcp, либо с явным указанием -http, если это поддерживается вашей версией и настройкой dbgs). Обычно достаточно просто -debug, так как современные платформы поднимают сервис отладки (dbgs) автоматически или параллельно.

    Проверьте, что служба dbgs (сервер отладки) запущена или порт отладки прослушивается.

  2. Настройка Конфигуратора. На клиентской машине откройте Конфигуратор.
  3. Перейдите в меню Сервис -> Параметры.
  4. Откройте вкладку Отладка.
  5. В разделе "Протокол отладки" выберите "Отладка по протоколу HTTP".
  6. Если необходимо, укажите адрес сервера отладки (обычно совпадает с адресом кластера), но часто достаточно автоматического определения.
  7. Перезапустите Конфигуратор и попробуйте подключиться к отладке снова (Меню Отладка -> Подключение...).

В окне "Предметы отладки" должны появиться серверные процессы (обозначены типом "Сервер").

Резюме

Если на Linux сервере с платформой 8.3.21+ не работает отладка:

  1. Не используйте SRV1CV8_DEBUG=1. Используйте Environment=SRV1CV8_DEBUG=-debug в override-файле systemd.
  2. Если процессы запущены с ключом -debug, но отладка не идет — проблема почти наверняка в сети (блокировка обратного вызова TCP).
  3. Переключите Конфигуратор в режим HTTP-отладки. Это решает проблему доступности в 90% случаев.
← На главную