v4.3: gateway 启动改为 install->start->验端口真监听; 菜单新增 12. WebUI 访问地址(含 SSH 隧道命令)
This commit is contained in:
+79
-8
@@ -921,9 +921,11 @@ onboard_and_start() {
|
||||
fi
|
||||
fi
|
||||
|
||||
info "启动 gateway…"
|
||||
if ! run_quiet openclaw gateway start; then
|
||||
warn "openclaw gateway start 返回失败,稍后统一检查运行状态。"
|
||||
info "启动 gateway(先安装服务再启动)…"
|
||||
if gateway_up; then
|
||||
ok "gateway 已启动,端口 $(gateway_port) 正在监听"
|
||||
else
|
||||
warn "gateway 启动后端口未监听,请在菜单选 8 查看状态排查。"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -1054,6 +1056,74 @@ CLAWEOF
|
||||
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() {
|
||||
local inst="未安装" run="未运行" ver=""
|
||||
if command -v openclaw >/dev/null 2>&1; then
|
||||
@@ -1168,9 +1238,8 @@ do_restart() {
|
||||
info "正在重启服务…"
|
||||
run_quiet openclaw gateway stop || true
|
||||
sleep 2
|
||||
if run_quiet openclaw gateway start; then
|
||||
sleep 2
|
||||
is_running && ok "服务已重启并在运行" || warn "已发出启动命令,但未检测到进程"
|
||||
if gateway_up; then
|
||||
ok "服务已重启,端口 $(gateway_port) 监听中"
|
||||
else
|
||||
warn "重启失败,请执行 openclaw status 查看"
|
||||
fi
|
||||
@@ -1246,6 +1315,7 @@ main_menu() {
|
||||
plain " ---------------------"
|
||||
plain " 10. 更新到最新版"
|
||||
plain " 11. 卸载"
|
||||
plain " 12. WebUI 访问地址"
|
||||
plain " 0. 退出"
|
||||
plain ""
|
||||
ask " 请输入选项并回车" "0"
|
||||
@@ -1273,7 +1343,7 @@ main_menu() {
|
||||
ask_yes_no " 重启服务生效?" "y" && do_restart
|
||||
fi
|
||||
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 ;;
|
||||
7) need_installed && do_restart; 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 "卸载失败"
|
||||
fi
|
||||
pause_any ;;
|
||||
12) show_webui; pause_any ;;
|
||||
0) plain "已退出。"; return 0 ;;
|
||||
*) warn "请输入 0-11 之间的选项。"; sleep 1 ;;
|
||||
*) warn "请输入 0-12 之间的选项。"; sleep 1 ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user