218 lines
5.6 KiB
Bash
Executable File
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
|