相关脚本命令需要修改,或者注释可以使用GPT(我设置是所有相关文件都放在/opt/bat目录下)
创建文件目录,并且设置文件权限
sudo mkdir -p /opt/bat
sudo chown $(whoami):$(whoami) /opt/bat
sudo chmod 755 /opt/bat
sudo nano /opt/bat/monitor_memory.sh
输入脚本(当前脚本是内存到85%,重启docker的hongyun-order容器)
#!/bin/bash
LOG_FILE="/opt/bat/memory_monitor.log"
# Function to get memory usage percentage
get_memory_usage() {
free | grep Mem | awk '{print $3/$2 * 100.0}'
}
# Function to restart Docker container
restart_docker_container() {
container_name=$1
echo "$(date): Memory usage is above 85%. Restarting Docker container: $container_name" | tee -a $LOG_FILE
docker restart $container_name
echo "$(date): Docker container $container_name restarted." | tee -a $LOG_FILE
}
# Main loop
while true; do
# Get current memory usage
memory_usage=$(get_memory_usage)
memory_usage=${memory_usage%.*} # Convert to integer
# Log the current memory usage
echo "$(date): Current memory usage: $memory_usage%" | tee -a $LOG_FILE
# Check if memory usage is above 85%
if [ $memory_usage -gt 85 ]; then
restart_docker_container "hongyun-order"
fi
# Sleep for a specified interval before checking again
sleep 60
done
按Ctrl+0保存、然后按Ctrl+x、再按y、再按Enter回车退出 给脚本执行权限
sudo chmod +x /opt/bat/monitor_memory.sh
创建logrotate
sudo nano /etc/logrotate.d/memory_monitor
输入(日志最大100m,保留10天,输出到/opt/bat目录)
/opt/bat/memory_monitor.log {
su root root
daily
rotate 10
size 100M
compress
delaycompress
missingok
notifempty
create 0644 root root
dateext
dateformat -%Y-%m-%d
}
按Ctrl+0保存、然后按Ctrl+x、再按y、再按Enter回车退出 验证,无返回,没有保存
sudo logrotate -f /etc/logrotate.d/memory_monitor
创建服务文件
sudo nano /etc/systemd/system/memory_monitor.service
输入
[Unit]
Description=Memory Monitor and Docker Container Restart Service
After=network.target
[Service]
ExecStart=/opt/bat/monitor_memory.sh
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=memory_monitor
[Install]
WantedBy=multi-user.target
按Ctrl+0保存、然后按Ctrl+x、再按y、再按Enter回车退出
sudo systemctl daemon-reload
sudo systemctl enable memory_monitor.service
sudo systemctl start memory_monitor.service
检查状态
sudo systemctl status memory_monitor.service
服务成功启动,并且/opt/bat目录下新增了memory_monitor.log日志文件,文件中在打印日志
额外命令重启服务
sudo systemctl restart memory_monitor.service