#!/bin/bash # WeChat-Nanobot Bridge 管理脚本 set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" # 服务名称 BRIDGE_SERVICE="weixin-nanobot-bridge" WEIXIN_SERVICE="weixin-nanobot-adapter" show_help() { echo "WeChat-Nanobot Bridge 管理工具" echo "" echo "用法: ./manage.sh [命令]" echo "" echo "命令:" echo " install 安装系统服务" echo " uninstall 卸载系统服务" echo " start 启动服务" echo " stop 停止服务" echo " restart 重启服务" echo " status 查看状态" echo " logs 查看日志" echo " test 测试 API" echo " update 更新代码并重启" echo "" echo "示例:" echo " ./manage.sh install # 安装为系统服务" echo " ./manage.sh start # 启动所有服务" echo " ./manage.sh logs # 查看实时日志" } install_service() { echo "🔧 安装系统服务..." sudo ./scripts/install-service.sh } uninstall_service() { echo "🗑️ 卸载系统服务..." sudo systemctl stop "$BRIDGE_SERVICE" "$WEIXIN_SERVICE" 2>/dev/null || true sudo systemctl disable "$BRIDGE_SERVICE" "$WEIXIN_SERVICE" 2>/dev/null || true sudo rm -f "/etc/systemd/system/${BRIDGE_SERVICE}.service" sudo rm -f "/etc/systemd/system/${WEIXIN_SERVICE}.service" sudo systemctl daemon-reload echo "✅ 已卸载" } start_service() { echo "🚀 启动服务..." sudo systemctl start "$BRIDGE_SERVICE" sleep 2 if systemctl is-active --quiet "$BRIDGE_SERVICE"; then echo "✅ Bridge 服务已启动" # 检查微信服务 if systemctl is-active --quiet "$WEIXIN_SERVICE" 2>/dev/null; then echo "✅ 微信适配器已启动" else echo "⚠️ 微信适配器未启动(可能需要先扫码登录)" echo " 手动运行: node weixin-bridge.js" fi else echo "❌ Bridge 服务启动失败" sudo systemctl status "$BRIDGE_SERVICE" --no-pager fi } stop_service() { echo "🛑 停止服务..." sudo systemctl stop "$WEIXIN_SERVICE" 2>/dev/null || true sudo systemctl stop "$BRIDGE_SERVICE" 2>/dev/null || true echo "✅ 已停止" } restart_service() { echo "🔄 重启服务..." sudo systemctl restart "$BRIDGE_SERVICE" sleep 2 if systemctl is-active --quiet "$WEIXIN_SERVICE" 2>/dev/null; then sudo systemctl restart "$WEIXIN_SERVICE" fi echo "✅ 已重启" } show_status() { echo "📊 服务状态" echo "==========" echo "" echo "Bridge 服务:" sudo systemctl status "$BRIDGE_SERVICE" --no-pager 2>/dev/null || echo " 未安装" echo "" echo "微信适配器:" sudo systemctl status "$WEIXIN_SERVICE" --no-pager 2>/dev/null || echo " 未安装" echo "" # 检查端口 if lsof -Pi :5000 -sTCP:LISTEN -t >/dev/null 2>&1; then echo "✅ 端口 5000 正在监听" else echo "❌ 端口 5000 未监听" fi } show_logs() { echo "📜 查看日志 (按 Ctrl+C 退出)" # 如果有 systemd 服务,使用 journalctl if systemctl is-active --quiet "$BRIDGE_SERVICE" 2>/dev/null; then sudo journalctl -u "$BRIDGE_SERVICE" -f --since "1 hour ago" & PID=$! sleep 1 read -p "按回车键停止查看日志..." kill $PID 2>/dev/null || true else # 否则查看本地日志 if [ -f "$PROJECT_DIR/logs/server.log" ]; then tail -f "$PROJECT_DIR/logs/server.log" else echo "❌ 日志文件不存在" fi fi } test_api() { echo "🧪 测试 API..." SERVER_IP=$(curl -s ifconfig.me) echo " 服务器: $SERVER_IP" # 测试健康检查 if curl -s "http://${SERVER_IP}:5000/health" > /dev/null 2>&1; then echo "✅ 健康检查通过" else echo "❌ 健康检查失败" return 1 fi # 测试消息 RESPONSE=$(curl -s -X POST "http://${SERVER_IP}:5000/chat" \ -H "Content-Type: application/json" \ -d '{"conversationId": "test", "text": "hello"}' 2>/dev/null) if echo "$RESPONSE" | grep -q "text"; then echo "✅ 消息接口正常" echo " 回复: $(echo "$RESPONSE" | grep -o '"text": "[^"]*"' | cut -d'"' -f4 | head -c 50)" else echo "❌ 消息接口异常" echo " 响应: $RESPONSE" fi } update_code() { echo "⬆️ 更新代码..." # 保存当前状态 WAS_RUNNING=false if systemctl is-active --quiet "$BRIDGE_SERVICE" 2>/dev/null; then WAS_RUNNING=true sudo systemctl stop "$BRIDGE_SERVICE" fi # 拉取更新 cd "$PROJECT_DIR" git pull origin master # 重新启动 if [ "$WAS_RUNNING" = true ]; then sudo systemctl start "$BRIDGE_SERVICE" echo "✅ 已更新并重启" else echo "✅ 已更新(服务未运行)" fi } # 主入口 case "${1:-help}" in install) install_service ;; uninstall) uninstall_service ;; start) start_service ;; stop) stop_service ;; restart) restart_service ;; status) show_status ;; logs) show_logs ;; test) test_api ;; update) update_code ;; help|--help|-h) show_help ;; *) echo "❌ 未知命令: $1" show_help exit 1 ;; esac