При переходе на новые версии платформы 1С:Предприятие (начиная с 8.3.21) и использовании современных дистрибутивов Linux (Ubuntu 22.04, Debian 10+ и др.) многие администраторы сталкиваются с тем, что привычные методы включения отладки перестают работать. В этой статье мы подробно разберем, почему старые инструкции с ИТС про "единичку" в конфиге могут не действовать, как правильно редактировать параметры службы systemd и почему в итоге стоит выбрать протокол HTTP.
Рассмотрим исходную ситуацию. У нас есть сервер на базе 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.
Разберем, как корректно передать флаг отладки службе сервера 1С. Не рекомендуется редактировать файлы напрямую в /opt/1cv8/... или /lib/systemd/system/, так как эти изменения пропадут при обновлении платформы.
Мы будем использовать механизм "drop-in" (override) файлов systemd. Выполним следующие шаги:
srv1cv8-{версия}@.service.systemctl edit srv1cv8-8.3.26.1498@default.service
(Имя службы может отличаться в зависимости от вашей инсталляции, проверьте его командой systemctl list-units | grep 1c).
Для включения отладки по протоколу 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.
Даже если мы видим флаг -debug в списке процессов, точки останова могут не срабатывать, а в окне "Предметы отладки" конфигуратора мы можем не видеть серверных сеансов. Это распространенная проблема, с которой столкнулся и автор темы.
Причина: Стандартная отладка (TCP) требует, чтобы сервер 1С мог инициировать обратное подключение к компьютеру, где запущен Конфигуратор. Это часто блокируется из-за:
Наиболее надежным решением, которое подтвердили участники обсуждения, является использование протокола HTTP для отладки. Этот протокол работает иначе: Конфигуратор сам обращается к серверу отладки, что снимает большинство проблем с сетевыми экранами и маршрутизацией.
Разберем алгоритм переключения на HTTP-отладку:
-debug (без -tcp, либо с явным указанием -http, если это поддерживается вашей версией и настройкой dbgs). Обычно достаточно просто -debug, так как современные платформы поднимают сервис отладки (dbgs) автоматически или параллельно.
Проверьте, что служба dbgs (сервер отладки) запущена или порт отладки прослушивается.
В окне "Предметы отладки" должны появиться серверные процессы (обозначены типом "Сервер").
Если на Linux сервере с платформой 8.3.21+ не работает отладка:
SRV1CV8_DEBUG=1. Используйте Environment=SRV1CV8_DEBUG=-debug в override-файле systemd.-debug, но отладка не идет — проблема почти наверняка в сети (блокировка обратного вызова TCP).