From fe6d91c3a54249ac84201e2ac7efad3f34471b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9=20=D0=9B=D0=B8?= =?UTF-8?q?=D1=82=D0=B2=D0=B8=D0=BD=D0=BE=D0=B2?= Date: Fri, 24 Apr 2026 21:39:02 +0300 Subject: [PATCH] v2.5.0: wait for telemt listener readiness --- lib/telemt.sh | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/lib/telemt.sh b/lib/telemt.sh index 91a8d80..7381e9b 100755 --- a/lib/telemt.sh +++ b/lib/telemt.sh @@ -195,18 +195,45 @@ EOF # previous Pro config (tls_domain=anten-ka.com) and was rejecting SNI=google.com # clients with unknown_sni_action=Drop even though the on-disk config said # tls_domain=google.com. +wait_telemt_ready() { + local timeout="${1:-90}" + local port elapsed=0 + port=$(awk ' + /^\[server\]/ { in_server=1; next } + /^\[/ && in_server { exit } + in_server && $1 == "port" { + sub(/^[^=]*=[[:space:]]*/, "") + gsub(/[[:space:]]/, "") + print + exit + } + ' "$TELEMT_CONFIG" 2>/dev/null) + [[ "$port" =~ ^[0-9]+$ ]] || port=443 + + while [ "$elapsed" -lt "$timeout" ]; do + if ! systemctl is-active --quiet "$TELEMT_SERVICE" 2>/dev/null; then + return 1 + fi + if ss -ltnp 2>/dev/null | grep -E ":${port}\b" | grep -q "telemt"; then + return 0 + fi + sleep 1 + elapsed=$((elapsed + 1)) + done + return 1 +} + start_telemt() { if systemctl is-active --quiet "$TELEMT_SERVICE" 2>/dev/null; then systemctl restart "$TELEMT_SERVICE" 2>/dev/null else systemctl start "$TELEMT_SERVICE" 2>/dev/null fi - sleep 2 - if systemctl is-active --quiet "$TELEMT_SERVICE"; then + if wait_telemt_ready 90; then log_success "telemt запущен" return 0 else - log_error "telemt не запустился" + log_error "telemt не запустился или не открыл порт" journalctl -u "$TELEMT_SERVICE" --no-pager -n 10 2>/dev/null return 1 fi @@ -223,12 +250,12 @@ stop_telemt() { restart_telemt() { systemctl restart "$TELEMT_SERVICE" 2>/dev/null - sleep 2 - if systemctl is-active --quiet "$TELEMT_SERVICE"; then + if wait_telemt_ready 90; then log_success "telemt перезапущен" return 0 else - log_error "telemt не перезапустился" + log_error "telemt не перезапустился или не открыл порт" + journalctl -u "$TELEMT_SERVICE" --no-pager -n 10 2>/dev/null return 1 fi }