mirror of
https://github.com/andrey271192/keenetic-dns-routes.git
synced 2026-09-20 14:42:01 +00:00
fix(tunnel): AUTOSSH_GATETIME=0 + setsid + log file for diagnostics
Background autossh kept exiting because of two things: 1. autossh's gate-time guard (default 30s): if first ssh dies "too fast" autossh treats it as failure and gives up. Setting GATETIME=0 disables it. 2. nohup+subshell on BusyBox doesn't always fully detach. Try setsid first (proper new session, no controlling tty) and fall back to nohup subshell. Also write autossh diagnostics to /tmp/kdns_tun.log and dump it on failure so the user can see the real reason instead of just "не запустился". Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
23
app/main.py
23
app/main.py
@@ -402,6 +402,10 @@ echo '[3/4] Скрипт тоннеля + автозапуск...'
|
|||||||
cat > /opt/bin/kdns_tun <<'RUNEOF'
|
cat > /opt/bin/kdns_tun <<'RUNEOF'
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
PATH="/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin:$PATH"
|
PATH="/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin:$PATH"
|
||||||
|
# GATETIME=0 — не сдаваться если первый коннект короткий (важно при фоне на BusyBox).
|
||||||
|
# LOGFILE — autossh пишет диагностику сюда вместо syslog (которого может не быть).
|
||||||
|
export AUTOSSH_GATETIME=0
|
||||||
|
export AUTOSSH_LOGFILE=/tmp/kdns_tun.log
|
||||||
exec autossh -M 0 \\
|
exec autossh -M 0 \\
|
||||||
-i /opt/etc/kdns_tk \\
|
-i /opt/etc/kdns_tk \\
|
||||||
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \\
|
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \\
|
||||||
@@ -424,20 +428,27 @@ chmod +x /opt/etc/init.d/S99kdns_tun
|
|||||||
echo '[4/4] Запуск...'
|
echo '[4/4] Запуск...'
|
||||||
killall autossh 2>/dev/null || true
|
killall autossh 2>/dev/null || true
|
||||||
sleep 1
|
sleep 1
|
||||||
# stdin=/dev/null обязательно: иначе autossh ловит EOF от закрытой curl-трубы и сразу выходит.
|
rm -f /tmp/kdns_tun.log
|
||||||
# subshell ( ... ) полностью отрывает процесс от родительского sh.
|
# Двойная защита: setsid если есть (полный отрыв от сессии), иначе subshell+nohup.
|
||||||
( nohup /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 & )
|
if command -v setsid >/dev/null 2>&1; then
|
||||||
sleep 4
|
setsid /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 &
|
||||||
|
else
|
||||||
|
( nohup /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 & )
|
||||||
|
fi
|
||||||
|
sleep 5
|
||||||
if killall -0 autossh 2>/dev/null; then
|
if killall -0 autossh 2>/dev/null; then
|
||||||
echo
|
echo
|
||||||
echo '=== OK ==='
|
echo '=== OK ==='
|
||||||
echo 'Тоннель: localhost:81 (роутер) -> VPS:{port}'
|
echo 'Тоннель: localhost:81 (роутер) -> VPS:{port}'
|
||||||
|
echo 'Лог: /tmp/kdns_tun.log'
|
||||||
echo 'Возвращайся в браузер и жми "Проверить связь"'
|
echo 'Возвращайся в браузер и жми "Проверить связь"'
|
||||||
else
|
else
|
||||||
echo
|
echo
|
||||||
echo '=== ОШИБКА: autossh не запустился в фоне ==='
|
echo '=== ОШИБКА: autossh не запустился в фоне ==='
|
||||||
echo 'Тест вручную (должно работать): /opt/bin/kdns_tun (Ctrl+C для выхода)'
|
echo '--- /tmp/kdns_tun.log ---'
|
||||||
echo 'Если вручную работает — попробуй: ( nohup /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 & )'
|
cat /tmp/kdns_tun.log 2>/dev/null || echo '(лог пустой)'
|
||||||
|
echo '-------------------------'
|
||||||
|
echo 'Тест вручную: /opt/bin/kdns_tun (Ctrl+C для выхода)'
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user