Files
aitsc/docs/port_management_guide.md

6.4 KiB
Raw Permalink Blame History

端口管理指南

📋 概述

本指南介绍如何管理Flask应用的端口占用问题确保服务稳定运行。

🛠️ 工具介绍

1. 端口管理脚本 (scripts/port_manager.sh)

功能:

  • 检查端口占用情况
  • 清理端口占用
  • 启动/停止/重启应用
  • 查看应用状态
  • 监控模式

使用方法:

# 检查端口占用
./scripts/port_manager.sh check

# 清理端口占用
./scripts/port_manager.sh clean

# 启动应用
./scripts/port_manager.sh start

# 停止应用
./scripts/port_manager.sh stop

# 重启应用
./scripts/port_manager.sh restart

# 查看状态
./scripts/port_manager.sh status

# 启动监控
./scripts/port_manager.sh monitor

# 显示帮助
./scripts/port_manager.sh help

2. 端口监控脚本 (scripts/port_monitor.py)

功能:

  • 实时监控端口状态
  • 自动检测服务异常
  • 自动重启服务
  • 生成监控报告
  • 系统资源监控

使用方法:

# 查看当前状态
python scripts/port_monitor.py status

# 生成详细报告
python scripts/port_monitor.py report

# 重启服务
python scripts/port_monitor.py restart

# 启动监控模式
python scripts/port_monitor.py monitor

# 查看配置
python scripts/port_monitor.py config

3. Systemd服务配置 (scripts/flask-app.service)

功能:

  • 系统级服务管理
  • 自动启动/停止
  • 故障自动重启
  • 日志管理

🔧 配置说明

端口管理脚本配置

脚本中的主要配置项:

PORT=5002                    # 应用端口
APP_NAME="flask_prompt_master"  # 应用名称
PID_FILE="logs/gunicorn.pid"    # PID文件路径
LOG_DIR="logs"                  # 日志目录

监控脚本配置

配置文件:logs/monitor_config.json

{
  "check_interval": 30,           // 检查间隔(秒)
  "max_restart_attempts": 3,      // 最大重启尝试次数
  "alert_threshold": 2,           // 告警阈值
  "port_timeout": 5,              // 端口检查超时时间
  "enable_alerts": true,          // 启用告警
  "auto_restart": true            // 自动重启
}

🚀 部署步骤

1. 安装systemd服务可选

# 复制服务文件
sudo cp scripts/flask-app.service /etc/systemd/system/

# 重新加载systemd
sudo systemctl daemon-reload

# 启用服务
sudo systemctl enable flask-app

# 启动服务
sudo systemctl start flask-app

# 查看状态
sudo systemctl status flask-app

2. 设置定时任务

# 编辑crontab
crontab -e

# 添加定时检查任务每5分钟检查一次
*/5 * * * * /home/renjianbo/aitsc/scripts/port_manager.sh status > /dev/null 2>&1

3. 配置日志轮转

创建日志轮转配置:/etc/logrotate.d/flask-app

/home/renjianbo/aitsc/logs/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 644 renjianbo renjianbo
    postrotate
        systemctl reload flask-app > /dev/null 2>&1 || true
    endscript
}

📊 监控和告警

1. 监控指标

  • 端口占用状态检查5002端口是否被正确占用
  • Gunicorn进程状态:检查主进程和工作进程
  • 服务响应状态检查HTTP服务是否正常响应
  • 系统资源CPU、内存、磁盘使用率

2. 告警机制

  • 自动告警:检测到异常时自动记录告警日志
  • 自动重启:服务异常时自动尝试重启
  • 重启限制:防止频繁重启,设置重启间隔和次数限制

3. 日志文件

  • logs/port_monitor.log:监控脚本日志
  • logs/port_alerts.log:告警日志
  • logs/gunicorn_error.logGunicorn错误日志
  • logs/gunicorn_access.logGunicorn访问日志

🔍 故障排查

1. 端口被占用

症状: 启动时提示 "Address already in use"

解决方案:

# 检查端口占用
./scripts/port_manager.sh check

# 清理端口占用
./scripts/port_manager.sh clean

# 重新启动
./scripts/port_manager.sh start

2. 服务无响应

症状: 访问网站显示连接被拒绝

解决方案:

# 检查服务状态
./scripts/port_manager.sh status

# 重启服务
./scripts/port_manager.sh restart

# 查看错误日志
tail -f logs/gunicorn_error.log

3. 进程异常退出

症状: PID文件存在但进程不存在

解决方案:

# 清理所有相关进程
pkill -f gunicorn

# 重新启动
./scripts/port_manager.sh start

📈 性能优化

1. 监控配置优化

根据服务器性能调整监控参数:

{
  "check_interval": 60,        // 降低检查频率
  "port_timeout": 3,           // 减少超时时间
  "max_restart_attempts": 5    // 增加重启尝试次数
}

2. 日志管理

定期清理日志文件:

# 清理30天前的日志
find logs/ -name "*.log" -mtime +30 -delete

# 压缩旧日志
find logs/ -name "*.log" -mtime +7 -exec gzip {} \;

3. 系统资源监控

设置资源告警阈值:

  • CPU使用率 > 80%
  • 内存使用率 > 90%
  • 磁盘使用率 > 85%

🔒 安全考虑

1. 权限管理

确保脚本和日志文件权限正确:

# 设置脚本权限
chmod +x scripts/port_manager.sh
chmod +x scripts/port_monitor.py

# 设置日志目录权限
chmod 755 logs/
chmod 644 logs/*.log

2. 网络安全

  • 限制端口访问只允许必要的IP访问5002端口
  • 防火墙配置配置iptables规则
  • SSL/TLS使用HTTPS协议

3. 监控安全

  • 监控脚本权限:只允许特定用户运行
  • 日志安全:定期备份和加密敏感日志
  • 告警安全:避免在告警中暴露敏感信息

📞 技术支持

1. 常见问题

Q: 为什么端口会被其他进程占用? A: 可能是之前的Gunicorn进程未完全清理或者有其他应用使用了相同端口。

Q: 如何防止服务意外停止? A: 使用systemd服务配置自动重启或启用监控脚本的自动重启功能。

Q: 监控脚本消耗太多资源怎么办? A: 调整检查间隔,或使用更轻量级的监控方式。

2. 联系支持

  • 查看日志文件获取详细错误信息
  • 使用状态检查命令诊断问题
  • 参考故障排查章节的解决方案

📝 更新日志

  • v1.0 - 初始版本,基础端口管理功能
  • v1.1 - 添加监控脚本和自动重启功能
  • v1.2 - 添加systemd服务配置和日志轮转
  • v1.3 - 优化监控性能和告警机制