Как включить серверную отладку 1С на Linux и подключиться из Конфигуратора или EDT

· 9 мин

Содержание

Чтобы отлаживать серверный код 1С 8.3 на Linux, агента сервера ragent запускают с ключами -debug -http. Тогда вместе с кластером стартует сервер отладки dbgs (по умолчанию порт 1550), а Конфигуратор или EDT подключаются к нему по адресу http://имя-сервера:1550. На Linux это делается правкой юнита systemd или файла настроек службы, после чего службу перезапускают.

Есть два режима отладки. Протокол TCP — старый: соединения идут в обе стороны, через NAT и межсетевые экраны он часто не работает . Протокол HTTP появился в 8.3.7, весь трафик идёт к одному порту сервера отладки — для Linux-сервера в отдельной сети это почти всегда правильный выбор. Служба RAS для самой отладки не обязательна, но без неё на Linux неудобно проверять кластер, процессы и сеансы: она даёт доступ утилите rac.

Подготовка сервера 1С на Linux к отладке

Сначала убедитесь, что всё сходится по версиям и сети. Половина «неработающей отладки» решается на этом шаге.

  • 🔢 Версия платформы. Конфигуратор (или платформа, указанная в EDT) и сервер должны быть одной сборки, вплоть до последней цифры: например, 8.3.24.1548 и там, и там. С другой сборкой отладчик к серверу не подключится.
  • 🌐 Имя сервера. Клиент должен разрешать имя Linux-машины так же, как оно записано в кластере. Проверьте hostname на сервере и ping имя-сервера с машины разработчика.
  • 🧪 Какой сервер. Включайте отладку на тестовом или копии рабочего. На рабочем сервере отладка замедляет выполнение кода, а остановка на точке останова держит блокировки и сеанс пользователя.
  • 👤 Права. Нужен sudo на сервере и права администратора кластера, если на кластере заданы администраторы.

Какие порты понадобятся

ПортКто слушаетЗачем
1540агент ragentподключение клиентов и консоли
1541менеджер кластера rmngrработа кластера
1545служба rasадминистрирование через rac
1550сервер отладки dbgsподключение отладчика (режим HTTP)
1560–1591рабочие процессы rphostдиапазон из свойств рабочего сервера

Номера стандартные. Если кластер ставили с другими -port, -regport и -range, используйте свои.

Открываем порты в межсетевом экране. Для Ubuntu и Debian с ufw:

sudo ufw allow 1540:1541/tcp
sudo ufw allow 1545/tcp
sudo ufw allow 1550/tcp
sudo ufw allow 1560:1591/tcp

Для РЕД ОС, Альт, CentOS и других систем с firewalld:

sudo firewall-cmd --permanent --add-port=1540-1541/tcp
sudo firewall-cmd --permanent --add-port=1545/tcp
sudo firewall-cmd --permanent --add-port=1550/tcp
sudo firewall-cmd --permanent --add-port=1560-1591/tcp
sudo firewall-cmd --reload

Порт 1550 открывайте только для сети разработчиков, а не для всего интернета. Сервер отладки позволяет останавливать и исследовать выполнение кода на сервере.

Запуск службы RAS и проверка кластера через rac

RAS (remote administration server) — это прослойка между утилитой rac и агентом сервера. Она понадобится, чтобы с Linux убедиться: кластер жив, рабочие процессы запущены, база зарегистрирована.

Разовый запуск для проверки

Исполняемые файлы лежат в каталоге платформы, обычно /opt/1cv8/x86_64/<версия>/:

cd /opt/1cv8/x86_64/8.3.24.1548
sudo -u usr1cv8 ./ras cluster --daemon --port=1545 localhost:1540

Здесь localhost:1540 — адрес агента, --port=1545 — порт, на котором RAS ждёт rac.

RAS как постоянная служба

Чтобы RAS поднимался вместе с сервером, оформите его юнитом systemd. В каталоге платформы свежих версий уже лежит готовый файл для RAS — его можно подключить через systemctl link. Если файла нет, создайте свой /etc/systemd/system/ras-1c.service:

[Unit]
Description=1C:Enterprise Remote Administration Server
After=network.target

[Service]
Type=simple
User=usr1cv8
Group=grp1cv8
ExecStart=/opt/1cv8/x86_64/8.3.24.1548/ras cluster --port=1545 localhost:1540
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now ras-1c

Проверяем кластер

./rac localhost:1545 cluster list
./rac localhost:1545 process list --cluster=<UUID-кластера>
./rac localhost:1545 infobase summary list --cluster=<UUID-кластера>

Первая команда выведет UUID кластера, вторая — рабочие процессы, третья — список баз. Если на кластере есть администратор, добавьте --cluster-user= и --cluster-pwd=. Полный список параметров — в ./rac help.

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

Ключ -debug передаётся агенту ragent при старте. Как именно — зависит от того, как установлена служба.

Перезапуск службы 1С обрывает все сеансы пользователей на этом сервере. Делайте это вне рабочего времени или на тестовом сервере.

Вариант 1. Служба systemd (новые версии платформы)

В новых версиях платформы служба называется по шаблону srv1cv8-<версия>@default. Найдите её:

systemctl list-units --all | grep srv1cv8
systemctl cat srv1cv8-8.3.24.1548@default

В выводе systemctl cat посмотрите строку ExecStart и блок Environment. Обычно команда запуска собирается из переменных вида SRV1CV8_PORT, SRV1CV8_RANGE, SRV1CV8_DEBUG. Если переменная отладки там есть, переопределите только её:

sudo systemctl edit srv1cv8-8.3.24.1548@default

В открывшемся редакторе:

[Service]
Environment="SRV1CV8_DEBUG=-debug -http"

Если такой переменной в ExecStart нет, переопределите команду целиком: пустая строка ExecStart= сбрасывает старую, следующая задаёт новую. Скопируйте исходную команду из systemctl cat и допишите в конец -debug -http.

sudo systemctl daemon-reload
sudo systemctl restart srv1cv8-8.3.24.1548@default

Правка через systemctl edit хранится отдельно, в каталоге .d рядом с юнитом. При обновлении платформы сам юнит заменится, а вашу настройку нужно будет перенести на службу новой версии.

Вариант 2. Старый скрипт init.d

На старых установках служба называется srv1cv83, а её настройки лежат в /etc/sysconfig/srv1cv83 (RHEL-подобные системы) или /etc/default/srv1cv83 (Debian и Ubuntu). В этом файле раскомментируйте и выставьте:

SRV1CV8_DEBUG=1

Затем перезапустите службу: sudo systemctl restart srv1cv83. Этот скрипт добавляет к агенту только -debug, то есть включает отладку по TCP. Если нужен HTTP, правьте строку запуска ragent в самом скрипте или переходите на юнит systemd.

Свой порт сервера отладки

Если на машине несколько кластеров (например, разных версий), у каждого должен быть свой порт отладки. Агенту для этого передают -debugServerPort:

-debug -http -debugServerPort 1650

Тогда адрес для отладчика будет http://имя-сервера:1650.

Проверка, что сервер отладки запустился

После перезапуска убедитесь, что ключи дошли до процесса и dbgs слушает порт:

ps -ef | grep ragent | grep -v grep
ss -tlnp | grep 1550

В строке процесса ragent должны быть видны -debug -http. Во втором выводе — процесс dbgs на порту 1550. Нет dbgs — значит, отладка не включилась или включилась в режиме TCP.

С машины разработчика проверьте доступность порта, например в PowerShell:

Test-NetConnection имя-сервера -Port 1550

TcpTestSucceeded : True — сеть в порядке, можно подключаться.

Подключение к отладке из Конфигуратора и EDT

Сервер готов. Теперь отладчик должен знать, к какому серверу отладки идти, и какие предметы отладки к себе подключать.

Конфигуратор

  1. Откройте базу на этом кластере в Конфигураторе той же версии, что и сервер.
  2. Зайдите в Сервис → Параметры → Запуск 1С:Предприятия. В поле режима отладки выберите протокол HTTP, адрес сервера отладки — http://имя-сервера:1550.
  3. Перезапустите Конфигуратор: параметры отладки применяются при подключении.
  4. Откройте Отладка → Подключение. Появится окно предметов отладки.
  5. Нажмите «Автоматическое подключение» и отметьте нужные типы: серверный контекст, фоновые задания, HTTP-сервисы, веб-сервисы — то, что собираетесь отлаживать.
  6. Поставьте точку останова в серверной процедуре (&НаСервере, общий модуль с флагом «Сервер», модуль объекта) и запустите клиент по F5.

Когда выполнение дойдёт до точки останова, Конфигуратор остановится на ней. Окно «Предметы отладки» покажет подключённые клиентские и серверные сеансы.

Запуск клиента вручную с отладкой

Если клиент открывают не из Конфигуратора, а ярлыком, передайте параметры в командной строке:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8c.exe" ENTERPRISE /S"имя-сервера\имя-базы" /DEBUG -http -attach /DEBUGGERURL "http://имя-сервера:1550"

Ключ -attach сразу подключает сеанс к отладчику, который уже открыт и подключён к этому серверу отладки.

1C:EDT

В EDT серверную базу отлаживают через конфигурацию отладки удалённого приложения. В её настройках указывают адрес сервера отладки http://имя-сервера:1550 и проект, к которому относится база. После запуска конфигурации EDT подключается к dbgs, а точки останова в серверных модулях срабатывают так же, как в Конфигураторе.

Для EDT тоже важна версия: в свойствах проекта должна стоять та же версия платформы, что работает на сервере.

HTTP-сервисы, веб-сервисы и веб-клиент

Если база опубликована на веб-сервере Apache на том же Linux-сервере, код HTTP- и веб-сервисов выполняется в рабочих процессах кластера. Чтобы такие вызовы попадали в отладчик, разрешите отладку в файле публикации default.vrd (лежит в каталоге публикации, например /var/www/имя-базы/):

<debug enable="true" protocol="http" url="http://имя-сервера:1550"/>

Элемент добавляется внутрь корневого point. После правки перезапустите Apache (sudo systemctl restart apache2 или httpd — смотря по дистрибутиву). Перезапуск веб-сервера прервёт текущие запросы к публикации.

Затем в окне автоматического подключения отметьте типы «HTTP-сервис» или «Веб-сервис» и отправьте тестовый запрос, например через curl.

Диагностика: отладка на сервере 1С под Linux не подключается

Ошибки идут по одной цепочке: служба → порт → сеть → версия → настройки отладчика. Проверяйте по порядку.

Диагностика: выберите симптом

Если ничего не помогло

  • 📄 Посмотрите журнал службы: journalctl -u srv1cv8-8.3.24.1548@default -n 100. Ошибки запуска ragent и dbgs часто видны именно там.
  • 🔁 Попробуйте временно отладку по TCP (-debug без -http) в той же сети без NAT. Если она работает, проблема в HTTP-цепочке: порт, имя сервера, адрес в Конфигураторе.
  • 🧩 Проверьте, не занят ли порт 1550 другим кластером или программой: ss -tlnp | grep 1550 покажет процесс-владелец.

Частые вопросы об отладке на Linux-сервере 1С

Нужно ли отключать отладку после работы?
Да, на рабочем сервере её лучше не держать включённой. Уберите -debug из параметров запуска и перезапустите службу в нерабочее время.
Можно ли отлаживать серверный код файловой базы, перенесённой на Linux?
Файловая база работает без кластера, серверный код выполняет сам клиент. Отладка включается параметрами клиента, ragent здесь не участвует.
Обязательно ли запускать RAS, чтобы работала отладка?
Нет. Сервер отладки запускает агент ragent с ключом -debug. RAS нужен для управления кластером через rac, а не для отладчика.
Подходит ли для подключения консоль администрирования с Windows?
Да, консоль кластера с Windows подключается к агенту на порту 1540, RAS ей не нужен. Версия консоли должна совпадать с версией сервера.
Можно ли отлаживать одновременно нескольким разработчикам?
Да, к одному серверу отладки подключаются несколько отладчиков. Каждый должен подключать свои предметы отладки, иначе один перехватит сеансы другого.