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 }