Останавливается служба 1С, порт уже используется

Останавливается служба 1С, порт уже используется

1с службаДобрый день! Уважаемые читатели и гости одного из крупнейших блогов по системному администрированию Pyatilistnik.org. В прошлый раз мы с вами устранили ошибку, когда запуск программы невозможен так как на компьютере отсутствует vcruntime140.dll. Сегодня у меня не менее интересная тема, в данной публикации вы узнаете по какой причине у вас останавливается служба 1С после 5 минут работы, обожаю я просто эту компанию.

Описание ситуации

Есть виртуальный сервер на гипервизоре Vmware ESXI 6.5 с установленной операционной системой Windows Server 2016. На нем развернут сервер 1С предприятия 8.3. По регламенты организации сервер был отправлен на обслуживание, всякие там обновляшки и все такое. После его перезагрузки ко мне обратился разработчик и сообщил, что у него не работает служба 1С. Я зашел по RDP на сервер и обнаружил, что в оснастке службы, сервисы 1С в состоянии оставлены:

  • 1C Remote Administration Service (RAS)
  • 1C Enterprise 8.3 Server Agent

проверка службы 1с

Хочу отметить, что 1С, это просто пример, в такой ситуации может оказать любая служба, например SQL Server, и такие примеры так же я встречал.

Восстановление работы службы 1С

Первое, что я полез делать, это в оснастке "Службы" проверил нет ли зависимостей которые могли не работать, для этого открываете свойства 1C Enterprise 8.3 Server Agent или 1C Remote Administration Service (RAS), переходите на вкладку зависимости (Dependencies), но я там ничего не обнаружил. Так же я удостоверился, что у меня тип запуска службы выставлено автоматически. Попробовав запустить сервис 1С я получил, что через 5 минут он опять остановился.

Проверка зависимостей службы 1С

Первым делом я как и любой системный администратор полез в логи Windows через просмотр событий, хотя можно использовать и Windows Admin Center. Изучал их, изучал, да так ничего и не нашел связанного с 1С, я вот всегда удивлялся почему они не сделают свой отдельный журнал.

Следующим шагом я решил посмотреть какие порты на текущий момент слушает служба 1С.

Напоминаю, что диапазон портов идет от 1540 до 1562

Для решения нашей задачи вы можете воспользоваться любым из представленных средств:

О каждой из них я подробно уже рассказывал, советую почитать. Мне по душе TCPView. Открыв ее выждите секунд 30, чтобы утилита просканировала все процессы и определила что за что отвечает. После чего нажмите пробел, чтобы включить паузу. В системах, где 1С работает корректно, порты TCP 1541-1562 должны слушаться процессом rphost.exe и rmngr.exe, в моем случае он ссылается на C:\Program Files\1cv8\8.3.15.1656\bin\rphost.exe и C:\Program Files\1cv8\8.3.15.1656\bin\rmngr.exe.

какие порты прослушивает служба 1с

Вот еще пример кода PowerShell, который позволит вам узнать ID процесса, который занял ваш порт, а по ID уже вычислить сам процесс все в том же диспетчере задач, данный метод подойдет если у вас нет под рукой TCPView.

cls
$tcpPort = "1541"
$tcpConn = Get-NetTCPConnection | Where-Object {$_.LocalPort -eq $tcpPort -or $_.RemotePort -eq $tcpPort}
$tcpConn
$process = $tcpConn | Select-Object OwningProcess -Unique
if ($process -ne $null)
{
Get-Process | Where-Object {$_.id -eq $process.OwningProcess} | Select-Object Id, ProcessName
}
else
{
write-output "No services found using that port"
}

Но в моем случае служба печати Spooler просто заняла эти порты. Самый простой вариант, это останавливаем службу, которая заняла нужный порт, и запускаем нужный сервис, который должен подхватить нужный порт, после этого пробуем запустить ранее остановленную службу. В большинстве случае, это помогает, если нет делаем дальше по инструкции.

Останавливается служба 1С, порт уже используется

Могу вам точно сказать из своей практики, что это специфическая работа операционной системы Windows. Немного освежу вашу память, в Windows есть такая вещь, как динамические порты, система их берет рандомно и назначает процессам. Каждый сеанс TCP требует двух конечных точек - конечной точки клиента и конечной точки сервера. Каждая конечная точка представляет собой комбинацию IP-адрес/порт, также известную как сокет TCP.

Обычно клиент запрашивает у ОС указание порта из ряда динамических портов. Сокет сервера - это порт IP/TCP службы, к которой подключается клиент (например, SQL Server или тот же 1С). Вот Windows и решила, что замечательно будет выделить порты из диапазона 1540-1562 для службы печати, пусть люди печатают же, Microsoft и не должна знать, что их кто-то использует, порты то динамические. Чтобы понять, какие порты у вас в системе обозначены как динамические вы можете выполнить команду. Открываем cmd от имени администратора и пишем:

netsh int ipv4 show dynamicportrange tcp

В моем примере, диапазон портов был от 1025 до 65534. Как видно порты 1541 до 1560 находится в этом диапазоне, так что, если вам случится иметь клиента (например, системные службы ОС Windows), который запускается ДО того, как 1С сделает это, то у вас два варианта:

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

просмотр динамических портов в Windows

Как запускать 1С на другом порты

Вот пример скрипта меняющего, это

sc config "1C:Enterprise 8.3 Server Agent (x86-64)" binPath= "/"C:\Program Files\1cv8\8.3.7.1917\bin\ragent.exe/" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d /"C:\Program Files\1cv8\srvinfo/""

Подробнее посмотрите вот тут https://techlab.rarus.ru/news/articles/kak-pravilno-obnov-i-t-platformu-1s-i-zapustit-neskolko-sluzhb-1s-na-odnom-servere-/

Как сделать исключение портов из динамической группы

Лично мне данный метод нравится куда больше, что делаем. В командной строке от имени администратора введите команду. чтобы посмотреть текущие исключения:

netsh int ipv4 show excludedportrange tcp

Вот вам пример с моего компьютера с Windows 10. Как видно, тут есть порт 5985, 47001 это WinRM.

Добавляем диапазон исключение портов

Теперь добавим новое исключение:

netsh int ipv4 add excludedportrange tcp startport=1541 numberofports=20 store=persistent

После выполнения этой команды вы увидите следующие исключенные порты

TCP-порт уже используется

В некоторых ситуациях потребуется перезагрузить сервер. Надеюсь, что данная статья поможет вам завести вашу службу 1С.

Еще есть ветка реестра, где можно так же производить управление вашими службами:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

Подробнее на https://docs.microsoft.com/en-us/windows/win32/services/automatically-starting-services

На этом у меня все. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *