v4.3: gateway 启动改为 install->start->验端口真监听; 菜单新增 12. WebUI 访问地址(含 SSH 隧道命令)
This commit is contained in:
+79
-8
@@ -921,9 +921,11 @@ onboard_and_start() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
info "启动 gateway…"
|
info "启动 gateway(先安装服务再启动)…"
|
||||||
if ! run_quiet openclaw gateway start; then
|
if gateway_up; then
|
||||||
warn "openclaw gateway start 返回失败,稍后统一检查运行状态。"
|
ok "gateway 已启动,端口 $(gateway_port) 正在监听"
|
||||||
|
else
|
||||||
|
warn "gateway 启动后端口未监听,请在菜单选 8 查看状态排查。"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1054,6 +1056,74 @@ CLAWEOF
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gateway_port() {
|
||||||
|
local port=""
|
||||||
|
if [ -f "${OPENCLAW_CONFIG:-}" ]; then
|
||||||
|
port="$(python3 - "$OPENCLAW_CONFIG" <<'PYEOF' 2>/dev/null
|
||||||
|
import json,sys
|
||||||
|
try:
|
||||||
|
c=json.load(open(sys.argv[1]))
|
||||||
|
p=(c.get("gateway") or {}).get("port")
|
||||||
|
print(p if p else "")
|
||||||
|
except Exception:
|
||||||
|
print("")
|
||||||
|
PYEOF
|
||||||
|
)"
|
||||||
|
fi
|
||||||
|
[ -z "$port" ] && port="18789"
|
||||||
|
printf '%s' "$port"
|
||||||
|
}
|
||||||
|
|
||||||
|
port_listening() {
|
||||||
|
local port="$1"
|
||||||
|
if command -v ss >/dev/null 2>&1; then
|
||||||
|
ss -tln 2>/dev/null | grep -q ":${port} " && return 0
|
||||||
|
fi
|
||||||
|
curl -s -o /dev/null -m 3 "http://127.0.0.1:${port}/" 2>/dev/null && return 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
gateway_up() {
|
||||||
|
# 真正启动:先确保服务已安装,再启动,最后验端口
|
||||||
|
local port; port="$(gateway_port)"
|
||||||
|
|
||||||
|
if ! run_quiet openclaw gateway install; then
|
||||||
|
_log "gateway install returned non-zero (may already be installed)"
|
||||||
|
fi
|
||||||
|
run_quiet openclaw gateway start || _log "gateway start returned non-zero"
|
||||||
|
|
||||||
|
local i
|
||||||
|
for i in 1 2 3 4 5 6 7 8 9 10; do
|
||||||
|
if port_listening "$port"; then return 0; fi
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
show_webui() {
|
||||||
|
[ -z "${OPENCLAW_CONFIG:-}" ] && detect_config_path
|
||||||
|
local port; port="$(gateway_port)"
|
||||||
|
local ip; ip="$(curl -s -m 5 https://api.ipify.org 2>/dev/null || hostname -I 2>/dev/null | awk '{print $1}')"
|
||||||
|
local sshport; sshport="$(ss -tlnp 2>/dev/null | grep sshd | grep -oE ':[0-9]+ ' | tr -d ': ' | head -1)"
|
||||||
|
[ -z "$sshport" ] && sshport="22"
|
||||||
|
|
||||||
|
plain ""
|
||||||
|
plain "${C_BOLD}WebUI / Dashboard 访问方式${C_RESET}"
|
||||||
|
plain " 本机地址: ${C_BOLD}http://127.0.0.1:${port}/${C_RESET}"
|
||||||
|
if port_listening "$port"; then
|
||||||
|
ok " 当前状态: 端口 ${port} 已监听,服务可访问"
|
||||||
|
else
|
||||||
|
warn " 当前状态: 端口 ${port} 未监听(gateway 可能未启动,请选 5 启动)"
|
||||||
|
fi
|
||||||
|
plain ""
|
||||||
|
plain " ${C_BOLD}它只监听本机回环,外网/手机不能直接打开。${C_RESET}"
|
||||||
|
plain " 从你自己的电脑访问,请用 SSH 隧道(在你本地电脑执行):"
|
||||||
|
plain " ${C_BOLD}ssh -p ${sshport} -L ${port}:127.0.0.1:${port} root@${ip:-<服务器IP>}${C_RESET}"
|
||||||
|
plain " 然后本地浏览器打开: ${C_BOLD}http://127.0.0.1:${port}${C_RESET}"
|
||||||
|
plain ""
|
||||||
|
hint "如需直接对公网开放,需自行改配置并加鉴权/防火墙,风险自负。"
|
||||||
|
}
|
||||||
|
|
||||||
svc_status_line() {
|
svc_status_line() {
|
||||||
local inst="未安装" run="未运行" ver=""
|
local inst="未安装" run="未运行" ver=""
|
||||||
if command -v openclaw >/dev/null 2>&1; then
|
if command -v openclaw >/dev/null 2>&1; then
|
||||||
@@ -1168,9 +1238,8 @@ do_restart() {
|
|||||||
info "正在重启服务…"
|
info "正在重启服务…"
|
||||||
run_quiet openclaw gateway stop || true
|
run_quiet openclaw gateway stop || true
|
||||||
sleep 2
|
sleep 2
|
||||||
if run_quiet openclaw gateway start; then
|
if gateway_up; then
|
||||||
sleep 2
|
ok "服务已重启,端口 $(gateway_port) 监听中"
|
||||||
is_running && ok "服务已重启并在运行" || warn "已发出启动命令,但未检测到进程"
|
|
||||||
else
|
else
|
||||||
warn "重启失败,请执行 openclaw status 查看"
|
warn "重启失败,请执行 openclaw status 查看"
|
||||||
fi
|
fi
|
||||||
@@ -1246,6 +1315,7 @@ main_menu() {
|
|||||||
plain " ---------------------"
|
plain " ---------------------"
|
||||||
plain " 10. 更新到最新版"
|
plain " 10. 更新到最新版"
|
||||||
plain " 11. 卸载"
|
plain " 11. 卸载"
|
||||||
|
plain " 12. WebUI 访问地址"
|
||||||
plain " 0. 退出"
|
plain " 0. 退出"
|
||||||
plain ""
|
plain ""
|
||||||
ask " 请输入选项并回车" "0"
|
ask " 请输入选项并回车" "0"
|
||||||
@@ -1273,7 +1343,7 @@ main_menu() {
|
|||||||
ask_yes_no " 重启服务生效?" "y" && do_restart
|
ask_yes_no " 重启服务生效?" "y" && do_restart
|
||||||
fi
|
fi
|
||||||
pause_any ;;
|
pause_any ;;
|
||||||
5) need_installed && { run_quiet openclaw gateway start && ok "已启动" || warn "启动失败"; }; pause_any ;;
|
5) need_installed && { gateway_up && ok "已启动,端口 $(gateway_port) 监听中" || warn "启动失败或端口未监听"; }; pause_any ;;
|
||||||
6) need_installed && { run_quiet openclaw gateway stop && ok "已停止" || warn "停止失败"; }; pause_any ;;
|
6) need_installed && { run_quiet openclaw gateway stop && ok "已停止" || warn "停止失败"; }; pause_any ;;
|
||||||
7) need_installed && do_restart; pause_any ;;
|
7) need_installed && do_restart; pause_any ;;
|
||||||
8) need_installed && { openclaw status 2>&1 | head -40; }; pause_any ;;
|
8) need_installed && { openclaw status 2>&1 | head -40; }; pause_any ;;
|
||||||
@@ -1296,8 +1366,9 @@ main_menu() {
|
|||||||
run_quiet npm uninstall -g openclaw && ok "已卸载(配置已保留)" || warn "卸载失败"
|
run_quiet npm uninstall -g openclaw && ok "已卸载(配置已保留)" || warn "卸载失败"
|
||||||
fi
|
fi
|
||||||
pause_any ;;
|
pause_any ;;
|
||||||
|
12) show_webui; pause_any ;;
|
||||||
0) plain "已退出。"; return 0 ;;
|
0) plain "已退出。"; return 0 ;;
|
||||||
*) warn "请输入 0-11 之间的选项。"; sleep 1 ;;
|
*) warn "请输入 0-12 之间的选项。"; sleep 1 ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user