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

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

1С на Linux: как включить отладку

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

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

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

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

Как устроена отладка 1С на Linux и что нужно проверить заранее

На Linux отладка работает по той же архитектуре, что и на Windows: сервер 1С (агент кластера) принимает отладочные подключения, а конфигуратор выступает отладчиком. Разница только в способе управления: вместо графической консоли служб используются systemd-юниты, скрипты и конфигурационные файлы.

Перед настройкой уточните три вещи: версию платформы (команда /opt/1cv8//linux/ragent --version или просмотр каталога установки), способ запуска сервера (systemd-юнит, init-скрипт, ручной запуск) и тип базы — клиент-серверная или файловая. Для файловой базы отладка включается на стороне клиента и не требует настройки сервера вообще.

Также проверьте права: редактировать юниты и перезапускать службы может только пользователь с правами root или через sudo. Убедитесь, что у вас есть возможность остановить сервер 1С — на рабочей системе это означает кратковременный простой пользователей.

Включение отладки сервера 1С через systemd

Самый частый сценарий — сервер 1С работает как служба systemd. Сначала найдите юнит: systemctl list-units | grep -i 1c или systemctl status srv1cv8-*. Обычно юнит называется примерно srv1cv8-8.3.xx.xxxx.service.

Откройте юнит на редактирование командой sudo systemctl edit --full srv1cv8-имя.service и найдите строку ExecStart. В параметрах запуска ragent добавьте -debug, а для HTTP-отладки дополнительно -http. Строка будет выглядеть примерно так:

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

После сохранения примените изменения и перезапустите службу:

bash
sudo systemctl daemon-reload
sudo systemctl restart srv1cv8-имя.service
sudo systemctl status srv1cv8-имя.service

Проверьте, что процесс действительно запущен с нужными флагами: ps aux | grep ragent. В строке процесса должны присутствовать -debug и, при необходимости, -http. Если флагов нет — служба подхватила старый юнит или существует переопределение в каталоге .service.d.

Если сервер запущен скриптом или вручную

В некоторых установках сервер стартует собственным init-скриптом или вручную из терминала. В этом случае найдите скрипт (часто /etc/init.d/srv1cv8 или файл в домашнем каталоге администратора) и добавьте -debug в команду запуска ragent аналогичным образом.

Для ручного запуска в отладочных целях можно остановить службу и запустить агент напрямую от пользователя usr1cv8:

bash
sudo systemctl stop srv1cv8-имя.service
sudo -u usr1cv8 /opt/1cv8/x86_64/8.3.22.1750/ragent -debug -http -d /var/lib/1cv8

Ручной запуск удобен для разовой диагностики: весь вывод агента виден в терминале, включая ошибки старта. После завершения работы остановите процесс (Ctrl+C) и верните штатную службу: sudo systemctl start srv1cv8-имя.service.

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

После перезапуска сервера откройте конфигуратор и перейдите в меню «Отладка → Подключение». Если используется TCP-протокол, сервер должен определиться автоматически или добавляется вручную по имени хоста. Для HTTP-отладки предварительно укажите протокол: «Сервис → Параметры → Отладка», переключатель «Протокол отладки» → «Отладка по HTTP», и задайте адрес публикации информационной базы на веб-сервере.

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

Порядок действий
  1. 1
    Остановите службу сервера 1С и добавьте -debug (и -http при необходимости) в параметры запуска ragent
  2. 2
    Перезапустите службу и проверьте флаги в выводе ps aux | grep ragent
  3. 3
    В конфигураторе откройте «Отладка → Подключение» и отметьте нужные типы предметов отладки
  4. 4
    Запустите клиентское приложение в режиме отладки (F5 или ключ /debug в командной строке)
  5. 5
    Поставьте точку останова и выполните отлаживаемое действие в клиенте

Клиентское приложение тоже должно быть запущено с признаком отладки. При запуске из конфигуратора клавишей F5 это происходит автоматически. При запуске отдельно добавьте в командную строку параметр /debug, а для HTTP-протокола — /debug -http и адрес публикации.

Отладка файловой базы под Linux-клиентом

Если база файловая и работает локально на Linux-машине, сервер 1С не участвует: отладка включается прямо в клиенте. Запустите конфигуратор, откройте базу и стартуйте отладку клавишей F5 — этого достаточно.

Для отладки уже запущенного клиента используйте ключ командной строки: /opt/1cv8/x86_64/8.3.22.1750/1cv8c ENTERPRISE /F /путь/к/базе /debug. Затем в конфигураторе подключитесь к предмету отладки через «Отладка → Подключение».

Сеть, порты и брандмауэр

При TCP-отладке отладчик подключается к агенту сервера по служебным портам. Стандартный диапазон сервера 1С — порт агента 1540, менеджера кластера 1541 и рабочие процессы 1560–1591. Если конфигуратор и сервер находятся на разных машинах, эти порты должны быть открыты в брандмауэре.

Для firewalld команды выглядят так:

bash
sudo firewall-cmd --permanent --add-port=1540-1591/tcp
sudo firewall-cmd --reload

Для HTTP-отладки достаточно доступа к веб-серверу (порты 80/443), что заметно упрощает сетевую настройку, когда сервер 1С закрыт корпоративным периметром. Именно поэтому HTTP-протокол рекомендуется для отладки удалённых серверов.

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

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

Конфигуратор и сервер 1С в одной сети без ограниченийИспользуйте классический TCP-протокол: ключ -debug у ragent и открытые порты 1540-1591
Сервер за NAT, файрволом или в другом контуреНастройте HTTP-отладку: ключи -debug -http, публикация базы на веб-сервере и выбор протокола HTTP в параметрах конфигуратора
База файловая и локальнаяСервер не трогайте: запускайте отладку клавишей F5 из конфигуратора
Нужно отладить фоновое заданиеВ окне подключения отметьте тип «Фоновое задание» и дождитесь старта задания на сервере

Проверка результата и типичные ошибки

Признак успешной настройки — предметы отладки видны в окне «Отладка → Подключение», а выполнение кода останавливается на точке останова. Если конфигуратор сообщает, что предметы отладки недоступны, проверяйте по списку: флаги запуска агента, совпадение версий платформы на сервере и клиенте, сетевую доступность портов.

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

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

Флаги процесса агента
Норма

ps aux показывает ragent с параметрами -debug (и -http при HTTP-отладке)

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

Процесс запущен без флагов — юнит не сохранён или есть переопределение

Окно подключения в конфигураторе
Норма

Видны предметы отладки нужных типов (сервер, клиент, фоновые задания)

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

Список пуст или ошибка подключения — проверьте порты и протокол

Реакция на точку останова
Норма

Выполнение останавливается, доступны стек вызовов и значения переменных

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

Точка обведена/проигнорирована — не отмечен нужный тип предмета отладки

Типичные ошибки
01
Изменили юнит, но забыли systemctl daemon-reload — служба стартует со старыми параметрами
02
Включили -debug на сервере, но клиент запущен без /debug — клиентские предметы отладки не появляются
03
Отмечен только тип «Тонкий клиент», а точка останова стоит в серверном коде — отладчик не останавливается
04
Версия платформы конфигуратора отличается от версии сервера — подключение к предметам отладки невозможно
05
Порты 1540-1591 закрыты файрволом — конфигуратор не видит сервер при TCP-отладке

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

Ограничения и меры безопасности

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

Для регулярной разработки удобнее держать отдельный тестовый кластер 1С на Linux с постоянно включённой отладкой, а продуктив переводить в отладочный режим только на время разбора конкретной проблемы. Это снижает и риски безопасности, и влияние на пользователей.

Итог

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

Отладка 1С на Linux включается флагом -debug у ragent (плюс -http для HTTP-протокола) с последующим перезапуском службы. Клиент запускается с /debug, в конфигураторе отмечаются нужные типы предметов отладки. После работы отладочный режим на продуктивном сервере отключают.

Частые вопросы

Как понять, что сервер 1С запущен в режиме отладки?

Выполните ps aux | grep ragent и посмотрите параметры процесса: должен присутствовать флаг -debug. Дополнительный признак — в конфигураторе в окне «Отладка → Подключение» становятся доступны серверные предметы отладки.

Точка останова не срабатывает, хотя отладка включена. Что проверить?

Чаще всего не отмечен нужный тип предмета отладки в окне подключения: для серверного кода нужен тип «Сервер», для фоновых заданий — «Фоновое задание». Также проверьте, что клиент запущен с /debug и версии платформы клиента и сервера совпадают.

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

HTTP-отладка работает через веб-сервер, поэтому не требует открытия служебных портов кластера (1540–1591) и проходит через NAT и корпоративные файрволы. Минус — нужна публикация информационной базы на веб-сервере и чуть более сложная первоначальная настройка.

Можно ли отлаживать файловую базу на Linux без сервера 1С?

Да. Сервер не нужен: откройте базу в конфигураторе и нажмите F5, либо запустите клиент с ключом /debug и подключитесь к нему через «Отладка → Подключение». Все механизмы отладки работают локально внутри клиентского процесса.

Опасно ли держать продуктивный сервер в режиме отладки?

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

Как отладить фоновое задание на Linux-сервере?

Включите отладку на сервере (флаг -debug), затем в конфигураторе в окне «Отладка → Подключение» отметьте тип «Фоновое задание». Когда задание запустится на сервере, оно появится в списке предметов отладки, и к нему можно подключиться. Учтите, что короткоживущие задания могут завершиться раньше подключения — в таком случае временно добавьте в код задержку.