fix: use start-stop-daemon for autossh background launch in tunnel script

- Replace setsid/nohup with start-stop-daemon -S -b as primary daemon
  method (setsid fails silently when script runs inside curl|sh pipe)
- Same fix in init.d S99kdns_tun start/restart cases

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Андрей Бобырев
2026-04-28 10:22:26 +03:00
parent 2d3ea7ad11
commit 515f0ec282

View File

@@ -418,9 +418,16 @@ chmod +x /opt/bin/kdns_tun
cat > /opt/etc/init.d/S99kdns_tun <<'INITEOF' cat > /opt/etc/init.d/S99kdns_tun <<'INITEOF'
#!/bin/sh #!/bin/sh
case "$1" in case "$1" in
start) killall -0 autossh 2>/dev/null || ( nohup /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 & ) ;; start)
killall -0 autossh 2>/dev/null && exit 0
/opt/sbin/start-stop-daemon -S -b -x /opt/bin/kdns_tun 2>/dev/null || \
( nohup /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 & )
;;
stop) killall autossh 2>/dev/null ;; stop) killall autossh 2>/dev/null ;;
restart) killall autossh 2>/dev/null; sleep 1; ( nohup /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 & ) ;; restart) killall autossh 2>/dev/null; sleep 1
/opt/sbin/start-stop-daemon -S -b -x /opt/bin/kdns_tun 2>/dev/null || \
( nohup /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 & )
;;
esac esac
INITEOF INITEOF
chmod +x /opt/etc/init.d/S99kdns_tun chmod +x /opt/etc/init.d/S99kdns_tun
@@ -429,8 +436,9 @@ echo '[4/4] Запуск...'
killall autossh 2>/dev/null || true killall autossh 2>/dev/null || true
sleep 1 sleep 1
rm -f /tmp/kdns_tun.log rm -f /tmp/kdns_tun.log
# Двойная защита: setsid если есть (полный отрыв от сессии), иначе subshell+nohup. if /opt/sbin/start-stop-daemon -S -b -x /opt/bin/kdns_tun 2>/dev/null; then
if command -v setsid >/dev/null 2>&1; then :
elif command -v setsid >/dev/null 2>&1; then
setsid /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 & setsid /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 &
else else
( nohup /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 & ) ( nohup /opt/bin/kdns_tun </dev/null >/dev/null 2>&1 & )