监听服务内存占用并重启服务器
设置日志文件夹
mkdir /data/log/
chmod -R 775 /data/log/
chown -R nobody.nobody /data/log/
# 创建日志
touch monitor_memory.log
# 让 www 用户可写入
chown www monitor_memory.log
编写脚本
cd /data/tasks_command/
vim monitor_memory.sh
写入内容
#!/bin/bash
# 日志文件路径
LOG_FILE="/data/log/monitor_memory.log"
# 获取总内存和已使用内存
total_mem=$(free -m | awk '/^Mem:/{print $2}')
used_mem=$(free -m | awk '/^Mem:/{print $3}')
# 获取当前时间
CURRENT_TIME=$(date '+%Y-%m-%d %H:%M:%S')
# 计算内存使用率
usage_percent=$(awk "BEGIN {printf \"%.2f\", ($used_mem/$total_mem)*100}")
# 内存使用超过75%时记录并重启
if (( $(echo "$usage_percent > 75" | bc -l) )); then
echo "$CURRENT_TIME: Memory usage is ${usage_percent}%" >> "$LOG_FILE"
echo "Top 5 memory consuming processes:" >> "$LOG_FILE"
# 获取内存占用最高的前5个进程并记录
ps aux --sort=-%mem | awk 'NR<=6{print $0}' >> "$LOG_FILE"
# 重新平滑启动服务器(如使用systemctl)
echo "$CURRENT_TIME: Restarting server..." >> "$LOG_FILE"
# 如果你想平滑重启服务(如web服务),可使用相应的命令,比如 systemctl restart your_service_name
# 如果需要重启整个服务器,请注意实际应用场景
# sudo reboot
# 平滑重启服务器的脚本
sudo /sbin/reboot
fi
配置和执行
赋予执行权限:
chmod +x monitor_memory.sh
chmod 777 monitor_memory.sh
使用 Crontab 定期执行此脚本并将输出记录到日志文件中。你可以通过以下步骤配置定时任务:
crontab -e
添加以下行到 crontab 文件中:
# 监听内容占用
* * * * * /data/tasks_command/monitor_memory.sh