При администрировании серверов 1С:Предприятие часто возникает необходимость переноса рабочего каталога службы (обычно это папка srvinfo) на другой диск или даже сетевой ресурс. Это делают ради экономии места на системном диске, ускорения работы за счет переноса на быстрые SSD/NVMe-накопители или для централизованного хранения журналов регистрации. Однако при изменении параметров запуска службы в реестре администраторы часто сталкиваются с неприятной ситуацией: служба сервера 1С запускается и тут же останавливается без видимых причин.
В этой статье мы подробно разберем, почему возникает эта проблема, как быстро и правильно провести диагностику без гадания на кофейной гуще, как настроить права доступа для сетевых ресурсов и почему популярный совет использовать команду mklink в некоторых случаях может полностью заблокировать работу системы.
Когда служба Windows завершает свою работу сразу после старта, операционная система выдает стандартное, малоинформативное сообщение: «Служба была запущена, а затем остановлена...». Чтобы не гадать, в чем дело, применим профессиональные методы диагностики. Рассмотрим три основных инструмента.
Способ 1. Запуск ragent в консольном режиме (самый быстрый и информативный способ)
Если служба падает на этапе инициализации, мы можем запустить исполняемый файл сервера 1С напрямую через командную строку от имени администратора. При этом важно исключить ключ -srvc, который указывает программе запускаться именно в качестве службы Windows. В консольном режиме утилита ragent.exe выведет все ошибки инициализации прямо на экран.
Разберем по шагам, как это сделать:
-srvc). Например:
"C:\Program Files\1cv8\8.3.12.1469\bin\ragent.exe" -agent -regport 1741 -port 1740 -range 1760:1791 -d "\\v-4\1c_journal_test" -debug
При таком запуске процесс не передаст управление Windows Service Control Manager, а попытается развернуть структуру папок по указанному пути. Если у процесса нет прав на создание файлов в сетевой папке \\v-4\1c_journal_test, мы мгновенно увидим в консоли системное сообщение об ошибке доступа: Access is denied или Отказано в доступе.
Способ 2. Анализ системных логов Windows (Event Viewer)
Каждое падение службы фиксируется операционной системой. Чтобы проанализировать произошедшее, выполним следующие действия:
eventvwr.msc).Service Control Manager.7000, 7009 или 7034. В описании события будет четко указано, какая именно ошибка помешала службе продолжить выполнение.Способ 3. Использование Технологического журнала (ТЖ) 1С
Если служба запускается, но падает чуть позже из-за внутренних критических ошибок платформы 1С, нам поможет Технологический журнал. Настроим сбор логов аварийного завершения:
C:\Program Files\1cv8\conf).logcfg.xml.
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\1C_Logs" history="2">
<event>
<eq property="Name" value="EXCP"/>
</event>
<property name="All"/>
</log>
</config>
После этого создадим на диске папку C:\1C_Logs и предоставим пользователю, под которым работает сервер 1С, полные права на чтение и запись в эту папку. При попытке старта службы в этой папке сформируются лог-файлы, в которых мы сможем детально проанализировать причину сбоя.
Чаще всего служба не стартует из-за непонимания механизмов безопасности Windows при работе с сетевыми путями (UNC-путями вида \\server\share). Разберем, почему так происходит.
По умолчанию при установке сервера 1С:Предприятие создается локальный пользователь компьютера — обычно это USR1CV8. Локальный пользователь физически существует только в рамках одной конкретной операционной системы. Когда служба 1С, запущенная от имени локального USR1CV8, пытается обратиться к сетевой папке \\v-4\1c_journal_test на другом сервере, удаленный компьютер отклоняет этот запрос. Для него локальный пользователь другого компьютера — это абсолютный «чужак», не прошедший авторизацию.
Чтобы предоставить службе 1С доступ к сетевой шаре, у нас есть два пути:
Для корректной работы в сети необходимо перевести службу 1С на запуск под учетной записью домена Active Directory.
DOMAIN\usr1cv8_service.services.msc), найдем службу «Агент сервера 1С:Предприятия», откроем ее свойства, перейдем на вкладку «Вход в систему» (Log On).DOMAIN\usr1cv8_service и введем пароль.\\v-4\1c_journal_test) в свойствах общей папки на вкладках «Доступ» (Sharing) и «Безопасность» (NTFS Security) предоставим нашему доменному пользователю права «Полный доступ» (Full Control).Если служба работает под учетной записью Network Service (Сетевая служба) или Local System, то при обращении к сети она авторизуется под именем самого компьютера в сети (DOMAIN\ИМЯ_СЕРВЕРА_1С$).
В этом случае в настройках безопасности сетевой папки на удаленном сервере необходимо добавить в список пользователей объект типа «Компьютеры» (Computers) и предоставить полные права учетной записи того сервера, на котором развернута платформа 1С.
Параметр запуска -d указывает не просто путь к журналам регистрации, а путь к рабочему каталогу всего кластера. Перенос этого каталога на сетевую шару несет в себе колоссальные архитектурные риски:
srvinfo хранятся файлы реестра кластера (srvribrg.lst), файлы блокировок транзакций, кэш конфигураций и файлы сеансов. Любое обращение платформы к этим критически важным файлам через сеть (по протоколу SMB) накладывает задержки передачи данных (network latency). Нагруженная база начнет работать крайне медленно.rphost, вылет всех активных пользователей с ошибками и возможную потерю данных.Альтернатива: Если цель переноса состоит исключительно в высвобождении места, занятого журналами регистрации, в современных версиях платформы 1С:Предприятие 8.3 (использующих новый формат логов .lgd на базе SQLite) правильнее переносить только подкаталог reg_**** конкретной информационной базы, содержащий файлы журналов, а не весь каталог кластера.
В ходе обсуждения на форуме прозвучало предложение решить проблему переноса с помощью создания символической ссылки:
mklink /j "C:\Program Files\1cv8\srvinfo" H:\srvinfo
Проанализируем эту команду и выясним, почему она содержит критическую ошибку, из-за которой система не заработает с сетевым ресурсом.
Ключ /j создает так называемое соединение для каталогов (Directory Junction). Архитектура операционной системы Windows накладывает жесткое ограничение: соединения Junction могут ссылаться исключительно на локальные пути и локальные диски. Они физически не умеют работать с сетевыми UNC-путями или подключенными сетевыми дисками (такими как диск H:\, который примонтирован в сессии пользователя).
Для корректного связывания локального пути с сетевым ресурсом необходимо использовать полноценную символическую ссылку для каталога. Разберем правильный алгоритм создания такой ссылки по шагам:
C:\Program Files\1cv8\srvinfo в резервное расположение./d, указав прямой сетевой UNC-путь:
mklink /d "C:\Program Files\1cv8\srvinfo" "\\v-4\1c_journal_test"
Обратите внимание: по умолчанию операционная система Windows из соображений безопасности блокирует переход локальных служб по удаленным символическим ссылкам (так называемая оценка ссылок «локальный-удаленный», L2R). Чтобы служба сервера 1С могла беспрепятственно работать через созданную символическую ссылку, на сервере приложений необходимо разрешить обработку таких путей. Выполним в командной строке команду:
fsutil behavior set SymlinkEvaluation L2R:1
После выполнения этих шагов служба 1С будет обращаться к локальному пути C:\Program Files\1cv8\srvinfo, а операционная система незаметно для платформы перенаправит все дисковые операции на сетевой ресурс \\v-4\1c_journal_test.
Мы подробно разобрали причины, по которым служба сервера 1С отказывается запускаться после изменения рабочего каталога. Перед запуском измененной конфигурации службы всегда сверяйтесь со следующим чек-листом:
USR1CV8 не имеет доступа к сети.ragent.exe напрямую из командной строки без флага -srvc. Это сэкономит часы времени, показав точную ошибку инициализации прямо на экране./d вместо /j и не забывайте активировать оценку путей L2R с помощью утилиты fsutil.