При работе с несколькими версиями платформы 1С:Предприятие на одном компьютере, будь то для тестирования или для поддержки различных конфигураций, таких как «Управление производственным предприятием» (УПП) или «Комплексная автоматизация» (КА), мы можем столкнуться с трудностями при запуске серверных служб. Типичная проблема — сообщение "Сервер 1С:Предприятия не обнаружен", сопровождающееся самопроизвольной остановкой службы агента сервера 1С. В данной статье мы подробно рассмотрим причины возникновения этой проблемы и представим комплексное решение, которое поможет вам настроить стабильную работу всех необходимых версий.
Предположим, у нас установлен зоопарк платформ, например, 8.3.16.1359, 8.3.10.2466 и 8.2.19.130. При попытке запустить службу для версии 8.3.10.2466, она либо не запускается вовсе, либо запускается и сразу останавливается с сообщением: "Служба "Агент сервера 1С:Предприятия 8.3.10.2466" на "Локальный компьютер" была запущена и затем остановлена. Некоторые службы автоматически останавливаются, если не используются другими службами или программами." Базы, требующие именно эту версию сервера, не работают.
В нашем случае, одной из самых распространенных и неочевидных причин самопроизвольной остановки службы и, как следствие, ошибки "Сервер 1С:Предприятия не обнаружен", является конфликт сетевых портов. Если мы настраиваем несколько экземпляров сервера 1С, каждый из них должен использовать свой уникальный диапазон портов. Даже если мы думаем, что порты разнесены, возможно, существует неявное занятие портов другими приложениями или процессами, или же предыдущие попытки установки оставили "фантомные" записи.
Шаги для проверки и устранения конфликта портов:
netstat в командной строке, запущенной от имени администратора.Например, для проверки порта 1740, мы вводим:
netstat -ano | findstr :1740
Если команда возвращает результат, это означает, что порт занят. Последнее число в выводе команды — это PID (идентификатор процесса).
Чтобы узнать, какое приложение занимает порт, мы используем tasklist:
tasklist | findstr <PID>
Замените <PID> на полученный идентификатор процесса. Если порт занят чем-то, не относящимся к 1С, нам следует изменить порт для 1С или завершить конфликтующее приложение.
Если простая смена портов не помогла, или мы хотим глубже понять причину, нам необходимо провести более детальную диагностику. Рассмотрим основные шаги.
Частой причиной остановки службы является ошибка входа в систему, которая часто проявляется как "Ошибка 1069: Служба не запущена из-за ошибки входа в систему". Даже если пользователь, под которым запускается служба (например, USR1CV82 или USR1CV8), имеет полные права на папку с установленной платформой 1С (например, C:\Program Files\1cv8), могут существовать другие ограничения:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services для самой службы и в ветках, где 1С хранит свои настройки).C:\Windows\Temp) и временные папки, связанные с профилем пользователя, от имени которого запускается служба.Local System account). Это исключит большинство проблем с правами. Если служба запустится, мы выясним, что проблема именно в правах. В этом случае, мы либо оставим системную учетную запись (для тестовых сред), либо будем более точно настраивать права для выделенного пользователя 1С. Для производственных систем рекомендуется использовать выделенного пользователя с минимально необходимыми правами.Операционная система Windows предоставляет мощный инструмент для диагностики – "Просмотр событий". В дополнение к системным журналам, нам стоит внимательно изучить другие журналы:
ragent.exe, rmngr.exe или rphost.exe.Технологический журнал 1С:Предприятия является наиболее мощным инструментом для диагностики проблем, непосредственно связанных с работой сервера 1С. Он записывает подробную информацию о внутренних процессах, ошибках и взаимодействии компонентов.
logcfg.xml: Нам необходимо создать или отредактировать файл logcfg.xml в каталоге conf установки сервера 1С:Предприятия. Например, для платформы 8.3.10.2466 это будет C:\Program Files\1cv8\8.3.10.2466\conf\logcfg.xml.logcfg.xml: В этом файле мы указываем компоненты, события которых требуется записывать, и путь к каталогу для файлов журнала. Для максимально подробной информации о работе сервера и причинах его остановок, рекомендуется включить следующие события: CALL, DBMSSQL, EXCP, SCALL, SDBL, SESN, SRVC.Пример файла logcfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\1C_Logs" history="10" maxfilesize="102400">
<event system="CALL"></event>
<event system="DBMSSQL"></event>
<event system="EXCP"></event>
<event system="SCALL"></event>
<event system="SDBL"></event>
<event system="SESN"></event>
<event system="SRVC"></event>
<property name="all"></property>
</log>
</config>
В этом примере C:\1C_Logs — это путь, куда будут записываться файлы журнала. Убедитесь, что у пользователя службы 1С есть полные права на этот каталог.
.log) мы сможем найти детальное описание ошибок, стеки вызовов и конкретные причины сбоя, которые не отображаются в стандартных журналах Windows.Даже на локальном компьютере брандмауэр Windows может блокировать соединения между процессами, если он настроен на строгие правила. Нам необходимо убедиться, что для процессов ragent.exe, rmngr.exe и rphost.exe (для каждой версии платформы, которая используется как сервер) разрешен входящий и исходящий трафик по всем используемым портам. Альтернативно, мы можем создать правила для конкретных исполняемых файлов, разрешив им весь сетевой трафик.
Для стабильной работы сервера 1С:Предприятия крайне важно правильно управлять его службами. Рассмотрим основные моменты.
Если служба была установлена некорректно или нам нужно изменить ее параметры, мы можем перерегистрировать ее. Для этого используются утилиты ragent.exe и sc.exe.
ragent.exe:
Сначала мы удаляем существующую службу (если она зарегистрирована):
Cd "C:\Program Files\1cv8\<версия_платформы>\bin"
.\ragent.exe -rmsrvc
Затем регистрируем новую службу с нужными параметрами. Обратите внимание на ключи -regport, -port, -range для задания уникальных портов и -d для указания отдельного каталога данных кластера.
.\ragent.exe -instsrvc -port 1740 -regport 1741 -range 1760:1791 -usr .\USR1CV82 -pwd <пароль_пользователя> -d "C:\Program Files\1cv8\srvinfo1741" -debug
После регистрации мы запускаем службу:
.\ragent.exe -start
Ключ -usr .\USR1CV82 указывает пользователя, от имени которого будет запускаться служба. .\ перед именем пользователя указывает на локальную учетную запись.
sc.exe и скриптов:
Для более гибкой и автоматизированной регистрации служб можно использовать командные файлы с утилитой sc.exe. Это особенно полезно при настройке нескольких серверов.
Пример командного файла register-service.bat:
@echo off
rem %1 - полный номер версии 1С:Предприятия (например, 8.3.16.1359)
rem %2 - первые две цифры номеров портов (например, для портов 1540,1541,1560:1591 - это цифра 15)
rem %3 - каталог с данными реестра кластера (например, c:\cluster_data\cluster1)
set SrvUserName=<имя_пользователя>
set SrvUserPwd=<пароль_пользователя>
rem Формируем полный диапазон портов (например, 1560:1591)
set RangePort=%260:%291
rem Формируем порт менеджера кластера (например, 1541)
set BasePort=%241
rem Формируем основной порт агента сервера (например, 1540)
set CtrlPort=%240
rem Формируем имя службы (например, "1C:Enterprise 8.3 Server Agent 1540 8.3.16.1359")
set SrvcName="1C:Enterprise 8.3 Server Agent %CtrlPort% %1"
rem Формируем путь к исполняемому файлу и его параметры
set BinPath="\"C:\Program Files\1cv8\%1\bin\ragent.exe\" /srvc /agent /regport %BasePort% /port %CtrlPort% /range %RangePort% /d \"%~3\" /debug"
rem Формируем отображаемое имя для службы в оснастке "Службы"
set Desctiption="Агент сервера 1С:Предприятия 8.3. Параметры: %1, %CtrlPort%, %BasePort%, %RangePort%"
rem Создаем каталог для данных кластера, если он не существует
if not exist "%~3" mkdir "%~3"
rem Останавливаем и удаляем существующую службу с таким именем
sc stop %SrvcName%
sc delete %SrvcName%
rem Создаем новую службу
sc create %SrvcName% binPath= %BinPath% start= auto obj= %SrvUserName% password= %SrvUserPwd% displayname= %Desctiption% depend= Dnscache/Tcpip/Tcpip6/lanmanworkstation/lanmanserver
rem Запускаем созданную службу
sc start %SrvcName%
Перед применением данного командного файла нам необходимо указать в нем данные реального пользователя (имя и пароль) от имени которого будет работать служба кластера серверов (строки set SrvUserName= и set SrvUserPwd=). Например, для локального пользователя USR1CV82 мы можем написать set SrvUserName=.\USR1CV82.
Пример использования:
register-service 8.3.16.1359 15 "c:\cluster_data\cluster16"
register-service 8.3.10.2466 18 "c:\cluster_data\cluster10"
Данный скрипт сначала остановит и удалит службу с указанным именем (если она существует), а затем создаст новую службу с заданными параметрами и запустит ее.
Иногда после неудачных попыток установки или удаления службы, она может перестать отображаться в оснастке "Службы" или не удаляться командой sc delete. В таких случаях записи о службе остаются в реестре Windows. Нам потребуется удалить их вручную, но это требует предельной осторожности.
regedit.exe) от имени администратора.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services.1C:Enterprise 8.3 Server Agent 1740 8.3.10.2466). Имя службы может отличаться в зависимости от версии и портов.Для успешной одновременной работы нескольких экземпляров сервера 1С на одном компьютере (например, 32-битной и 64-битной версии или разных версий платформы) нам необходимо строго соблюдать следующие правила:
C:\Program Files\1cv8\8.3.16.1359\bin\ragent.exeC:\Program Files\1cv8\8.3.10.2466\bin\ragent.exeC:\Program Files\1cv82\8.2.19.130\bin\ragent.exe-regport (порт менеджера регистрации)-port (порт главного менеджера кластера)-range (диапазон портов для рабочих процессов)Пример: -regport 1741 -port 1740 -range 1760:1791 для одной службы и -regport 1541 -port 1540 -range 1560:1591 для другой.
-d при регистрации службы). Это предотвращает конфликты и путаницу в метаданных кластеров.
-d "C:\Program Files\1cv8\srvinfo1741"-d "C:\Program Files\1cv8\srvinfo1541"USR1CV8_8_3_16 и USR1CV8_8_3_10). Каждому такому пользователю предоставляются минимально необходимые права на соответствующие каталоги платформы, данные кластера и временные папки.ragent.exe, указывающим на соответствующую архитектуру (например, Program Files (x86) для 32-битной и Program Files для 64-битной).Следуя этим рекомендациям и тщательно анализируя логи событий и технологический журнал, мы сможем успешно настроить и поддерживать работоспособность нескольких экземпляров сервера 1С:Предприятия на одном компьютере, избегая проблем с обнаружением сервера и остановкой служб.