#!/bin/bash # PromptForge 服务监控脚本 LOG_FILE="/home/renjianbo/aiapply/logs/monitor.log" DATE=$(date '+%Y-%m-%d %H:%M:%S') # 创建日志目录 mkdir -p /home/renjianbo/aiapply/logs # 检查服务状态 if ! netstat -tlnp | grep -q :3000; then echo "[$DATE] ❌ 服务未运行,尝试重启..." >> $LOG_FILE cd /home/renjianbo/aiapply pm2 restart promptforge sleep 5 if netstat -tlnp | grep -q :3000; then echo "[$DATE] ✅ 服务重启成功" >> $LOG_FILE else echo "[$DATE] ❌ 服务重启失败" >> $LOG_FILE fi else echo "[$DATE] ✅ 服务运行正常" >> $LOG_FILE fi # 检查内存使用 MEMORY_USAGE=$(free | grep Mem | awk '{printf "%.1f", $3/$2 * 100.0}') if (( $(echo "$MEMORY_USAGE > 80" | bc -l) )); then echo "[$DATE] ⚠️ 内存使用率过高: ${MEMORY_USAGE}%" >> $LOG_FILE fi # 检查磁盘空间 DISK_USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//') if [ $DISK_USAGE -gt 80 ]; then echo "[$DATE] ⚠️ 磁盘使用率过高: ${DISK_USAGE}%" >> $LOG_FILE fi # 检查 PM2 状态 PM2_STATUS=$(pm2 list | grep promptforge | awk '{print $10}' 2>/dev/null) if [ "$PM2_STATUS" != "online" ]; then echo "[$DATE] ⚠️ PM2 服务状态异常: $PM2_STATUS" >> $LOG_FILE fi # 记录系统负载 LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//') echo "[$DATE] 📊 系统负载: $LOAD_AVG, 内存使用: ${MEMORY_USAGE}%, 磁盘使用: ${DISK_USAGE}%" >> $LOG_FILE # 保持日志文件大小合理(保留最近1000行) tail -n 1000 $LOG_FILE > $LOG_FILE.tmp && mv $LOG_FILE.tmp $LOG_FILE