Как включить серверную отладку 1С на Linux и подключиться из Конфигуратора или EDT
Содержание
Чтобы отлаживать серверный код 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С:Предприятия. В поле режима отладки выберите протокол HTTP, адрес сервера отладки —http://имя-сервера:1550. - Перезапустите Конфигуратор: параметры отладки применяются при подключении.
- Откройте
Отладка → Подключение. Появится окно предметов отладки. - Нажмите «Автоматическое подключение» и отметьте нужные типы: серверный контекст, фоновые задания, HTTP-сервисы, веб-сервисы — то, что собираетесь отлаживать.
- Поставьте точку останова в серверной процедуре (
&НаСервере, общий модуль с флагом «Сервер», модуль объекта) и запустите клиент по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покажет процесс-владелец.