Files
nanocode/weixin-nanobot-bridge/scripts/manage.sh
T
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

218 lines
5.6 KiB
Bash
Executable File

#!/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