feat(web-info): проверка TCP-порта Apache

Статус строился только по наличию процесса httpd: при живом процессе и
не поднявшемся сервере (занятый порт, битый конфиг) навык рапортовал
«Запущен». Теперь порт из Listen проверяется TCP-коннектом на 127.0.0.1
с таймаутом 1 с — «(слушается)» / «(не отвечает)».

Сами публикации намеренно не опрашиваются: запрос к /{AppName} поднимает
сеанс веб-клиента 1С и занимает лицензию, а публикаций может быть много.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-08 15:46:22 +03:00
co-authored by Claude Opus 5
parent b8cbb0111a
commit 0d4933f135
3 changed files with 35 additions and 6 deletions
+19 -2
View File
@@ -1,4 +1,4 @@
# web-info v1.2 — Apache & 1C publication status
# web-info v1.3 — Apache & 1C publication status
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
<#
.SYNOPSIS
@@ -82,7 +82,24 @@ $port = "—"
if ($confContent -match '(?m)^Listen\s+(\d+)') {
$port = $Matches[1]
}
Write-Host "Port: $port"
# Проверяем именно TCP-порт: запрос к публикации поднял бы сеанс 1С и занял лицензию
$portState = ""
if ($port -ne "") {
$client = New-Object System.Net.Sockets.TcpClient
try {
$async = $client.BeginConnect("127.0.0.1", [int]$port, $null, $null)
if ($async.AsyncWaitHandle.WaitOne(1000) -and $client.Connected) {
$portState = " (слушается)"
} else {
$portState = " (не отвечает)"
}
} catch {
$portState = " (не отвечает)"
} finally {
$client.Close()
}
}
Write-Host "Port: $port$portState"
# Extract wsap24 path
if ($confContent -match 'LoadModule\s+_1cws_module\s+"([^"]+)"') {