掘金 后端 ( ) • 2024-06-17 17:51

相关脚本命令需要修改,或者注释可以使用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日志文件,文件中在打印日志 image.png

image.png

image.png 额外命令重启服务

sudo systemctl restart memory_monitor.service