From 282f205759fa2e61de0b41593774f61ab02060f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=91=D0=BE=D0=B1?= =?UTF-8?q?=D1=8B=D1=80=D0=B5=D0=B2?= Date: Sun, 26 Apr 2026 00:34:17 +0300 Subject: [PATCH] =?UTF-8?q?init:=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=20?= =?UTF-8?q?=D0=B1=D0=B5=D0=B7=20nohup=20(=D0=B5=D0=B3=D0=BE=20=D0=BD=D0=B5?= =?UTF-8?q?=D1=82=20=D0=B2=20BusyBox=20=D1=8D=D1=82=D0=BE=D0=B9=20=D1=81?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=D0=BA=D0=B8)=20+=20IP=20LAN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - В Entware на Keenetic обычно нет /opt/bin/nohup; init-скрипт пробует setsid → nohup → сабшелл с trap '' HUP. Демон больше не падает на старте с «nohup: not found». - После запуска ждём 1 сек и проверяем kill -0 — если упал, пишем внятную ошибку и подсказку посмотреть лог, а не молчаливое «started». - Финальная подсказка ищет именно LAN-IP роутера (192.168/10/172.x с октетом .1), а не первый попавшийся 192.168.x.x с другого интерфейса. --- install.sh | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/install.sh b/install.sh index 4d839c9..1e67762 100644 --- a/install.sh +++ b/install.sh @@ -97,10 +97,28 @@ case "$1" in set +a export PYTHONUNBUFFERED=1 PORT="${PORT:-2001}" - nohup "$PYBIN" -m waitress --listen="0.0.0.0:$PORT" app:app \ - >>/opt/var/log/keenetic-ssh-web.log 2>&1 & + LOG="/opt/var/log/keenetic-ssh-web.log" + # Запуск в фоне без nohup (его в BusyBox этой сборки нет). + # Предпочитаем setsid (новая сессия), иначе сабшелл с trap '' HUP. + if command -v setsid >/dev/null 2>&1; then + setsid "$PYBIN" -m waitress --listen="0.0.0.0:$PORT" app:app \ + >"$LOG" 2>&1 & + elif command -v nohup >/dev/null 2>&1; then + nohup "$PYBIN" -m waitress --listen="0.0.0.0:$PORT" app:app \ + >>"$LOG" 2>&1 & + else + ( trap '' HUP; exec "$PYBIN" -m waitress --listen="0.0.0.0:$PORT" app:app \ + >"$LOG" 2>&1 ) & + fi echo $! > "$PID" - echo "keenetic_ssh-web started pid=$(cat "$PID") port=$PORT" + sleep 1 + if kill -0 "$(cat "$PID")" 2>/dev/null; then + echo "keenetic_ssh-web started pid=$(cat "$PID") port=$PORT" + else + rm -f "$PID" + echo "ОШИБКА запуска. Лог: tail -n 30 $LOG" + exit 1 + fi ;; stop) if [ -f "$PID" ]; then @@ -137,8 +155,15 @@ if [ -d /opt/etc/rc.d ] && [ ! -e /opt/etc/rc.d/S99keenetic-ssh-web ]; then echo "==> Автозапуск: /opt/etc/rc.d/S99keenetic-ssh-web → $INIT" fi -# Узнаём IP роутера для подсказки в браузер -ROUTER_IP="$(ip -4 addr show 2>/dev/null | awk '/inet 192\.168\./ {print $2; exit}' | cut -d/ -f1)" +# Узнаём LAN-IP роутера для подсказки в браузер: ищем 192.168.x.1 / 10.x.x.1 +ROUTER_IP="$( + ip -4 -o addr show 2>/dev/null \ + | awk '$4 ~ /^(192\.168|10|172\.(1[6-9]|2[0-9]|3[01]))\..*\.1\// {sub("/.*","",$4); print $4; exit}' +)" +if [ -z "$ROUTER_IP" ]; then + ROUTER_IP="$(ifconfig 2>/dev/null \ + | awk '/inet (addr:)?(192\.168|10\.|172\.)/ {for(i=1;i<=NF;i++) if($i ~ /^(addr:)?(192\.168|10\.|172\.)/){gsub("addr:","",$i); if($i ~ /\.1$/){print $i; exit}}}')" +fi [ -z "$ROUTER_IP" ] && ROUTER_IP="IP_РОУТЕРА" echo ""