v4.3: gateway 启动改为 install->start->验端口真监听; 菜单新增 12. WebUI 访问地址(含 SSH 隧道命令)

This commit is contained in:
2026-08-10 09:00:08 +00:00
parent 0751f6cdeb
commit fe012f8257
+79 -8
View File
@@ -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
} }