mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-08 20:43:21 +03:00
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:
co-authored by
Claude Opus 5
parent
b8cbb0111a
commit
0d4933f135
@@ -43,6 +43,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/web-info.ps1" <па
|
||||
| В выводе | Что значит |
|
||||
|----------|------------|
|
||||
| `Status: Остановлен` | Apache не запущен — публикации в `httpd.conf` есть, но URL-ы не отвечают. Поднимается повторным `/web-publish` |
|
||||
| `Port: 9191 (не отвечает)` | Порт из `httpd.conf` не слушается. При `Status: Запущен` — процесс жив, но сервер не поднялся: смотри ошибки ниже (занятый порт, битый конфиг) |
|
||||
| `[WARN] Обнаружен сторонний Apache` | На машине работает чужой экземпляр — может держать порт; наши команды им не управляют |
|
||||
| `[WS HTTP OData]` | Что опубликовано для базы: SOAP-сервисы, HTTP-сервисы, стандартный OData |
|
||||
| `+ext` (`WS+ext`) | Публикуются и сервисы, поставляемые расширениями конфигурации |
|
||||
@@ -54,8 +55,10 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/web-info.ps1" <па
|
||||
иначе они вытесняют содержательное. Записи могут быть давними — смотри дату в строке. Путь к
|
||||
журналу печатается рядом: нужен полный контекст или отсеянные уровни — читай файл напрямую.
|
||||
|
||||
Публикация в списке не означает, что база отвечает: `/web-info` читает `httpd.conf` и дескрипторы,
|
||||
а не опрашивает URL-ы. Если нужно убедиться — дёрни URL.
|
||||
Проверяется только TCP-порт Apache. Публикация в списке не означает, что база отвечает: состав
|
||||
берётся из `httpd.conf` и дескрипторов, сами URL-ы не опрашиваются. Причина не в лени: запрос к
|
||||
`/{AppName}` поднимает сеанс веб-клиента 1С и занимает лицензию, а публикаций может быть много.
|
||||
Нужно убедиться в конкретной базе — дёрни её URL осознанно, помня про лицензию.
|
||||
|
||||
## Примеры
|
||||
|
||||
|
||||
@@ -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+"([^"]+)"') {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# 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
|
||||
|
||||
"""
|
||||
@@ -11,6 +11,7 @@
|
||||
import argparse
|
||||
import os
|
||||
import re
|
||||
import socket
|
||||
import sys
|
||||
|
||||
import psutil
|
||||
@@ -92,7 +93,15 @@ def main():
|
||||
m = re.search(r'(?m)^Listen\s+(\d+)', conf_content)
|
||||
if m:
|
||||
port = m.group(1)
|
||||
print(f'Port: {port}')
|
||||
# Проверяем именно TCP-порт: запрос к публикации поднял бы сеанс 1С и занял лицензию
|
||||
port_state = ''
|
||||
if port != '—':
|
||||
try:
|
||||
with socket.create_connection(('127.0.0.1', int(port)), timeout=1):
|
||||
port_state = ' (слушается)'
|
||||
except OSError:
|
||||
port_state = ' (не отвечает)'
|
||||
print(f'Port: {port}{port_state}')
|
||||
|
||||
# Extract wsap24 path
|
||||
m = re.search(r'LoadModule\s+_1cws_module\s+"([^"]+)"', conf_content)
|
||||
|
||||
Reference in New Issue
Block a user