49 lines
1.6 KiB
Bash
Executable File
49 lines
1.6 KiB
Bash
Executable File
#!/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
|