fix: 修复服务崩溃问题 - 添加异常处理和PM2进程管理
问题分析: - 服务频繁崩溃(平均1小时1次) - 无异常处理导致任何错误都引发进程退出 - 无进程管理器,崩溃后不自动重启 - 端口冲突无检测机制 主要修复: 1. 全局异常处理 - uncaughtException 捕获 - unhandledRejection 捕获 - 端口错误监听 - API错误中间件 2. PM2进程管理 - 安装PM2 v6.0.14 - 配置自动重启 - 启用开机自启(systemd) - 进程监控和日志管理 3. 健康检查端点 - GET /health - 返回运行时状态、内存、版本信息 - 用于监控和诊断 4. 优雅关闭机制 - 正确释放HTTP服务器 - 关闭数据库连接 - 10秒超时保护 5. 配置文件修复 - package.json: main指向server.js - 版本更新到3.1.0 - 添加PM2快捷命令 新增文件: - CRASH-ANALYSIS.md: 详细问题分析报告 - service.sh: 服务管理脚本(start/stop/restart/logs等) 测试结果: - 20次并发请求 100%成功 - PM2自动重启验证通过 - 开机自启配置完成 影响: - 稳定性: 1小时1崩 → 持续稳定运行 - 可维护性: 完善的日志和监控 - 可靠性: 崩溃自动恢复
This commit is contained in:
Executable
+62
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
# 任务管理系统服务控制脚本
|
||||
|
||||
PM2="/data/npm-global/bin/pm2"
|
||||
SERVICE_NAME="task-service"
|
||||
SERVICE_DIR="/data/openclaw/workspace/agent-task-service"
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
echo "🚀 启动服务..."
|
||||
cd "$SERVICE_DIR"
|
||||
$PM2 start server.js --name "$SERVICE_NAME"
|
||||
;;
|
||||
stop)
|
||||
echo "⏸️ 停止服务..."
|
||||
$PM2 stop "$SERVICE_NAME"
|
||||
;;
|
||||
restart)
|
||||
echo "🔄 重启服务..."
|
||||
$PM2 restart "$SERVICE_NAME"
|
||||
;;
|
||||
status)
|
||||
$PM2 status "$SERVICE_NAME"
|
||||
;;
|
||||
logs)
|
||||
$PM2 logs "$SERVICE_NAME" --lines ${2:-50}
|
||||
;;
|
||||
monitor)
|
||||
$PM2 monit
|
||||
;;
|
||||
health)
|
||||
echo "🏥 健康检查..."
|
||||
curl -s http://localhost:3000/health | python3 -m json.tool
|
||||
;;
|
||||
test)
|
||||
echo "🧪 测试API..."
|
||||
echo "1. 健康检查:"
|
||||
curl -s http://localhost:3000/health | python3 -m json.tool | head -5
|
||||
echo ""
|
||||
echo "2. 统计信息:"
|
||||
curl -s http://localhost:3000/api/stats | python3 -m json.tool
|
||||
;;
|
||||
*)
|
||||
echo "用法: $0 {start|stop|restart|status|logs|monitor|health|test}"
|
||||
echo ""
|
||||
echo "命令说明:"
|
||||
echo " start - 启动服务"
|
||||
echo " stop - 停止服务"
|
||||
echo " restart - 重启服务"
|
||||
echo " status - 查看状态"
|
||||
echo " logs - 查看日志(可选参数:行数,默认50)"
|
||||
echo " monitor - 实时监控"
|
||||
echo " health - 健康检查"
|
||||
echo " test - 测试API"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 logs 100 # 查看最近100行日志"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user