监测NAME是blade-jiangxinzhougarden的服务,如果内存(MEM USAGE)超过10G则在凌晨4点执行重新构建命令
1.编写脚本文件restart_jxz.sh
#!/bin/bash# 设置要监控的容器名称或服务名称(替换成你的服务名)
SERVICE_NAME="blade-jiangxinzhougarden"# 获取服务的内存使用情况,这里假设服务对应的容器名称为 $SERVICE_NAME
MEMORY_USAGE=$(docker stats --no-stream --format "{{.MemUsage}}" $SERVICE_NAME | sed 's/[^0-9]*//g')# 将内存使用量转换为 GB
MEMORY_GB=$(echo "scale=2; $MEMORY_USAGE / 1024 / 1024 / 1024" | bc)# 设置内存阈值 不超过10G
CRITICAL_MEMORY=10# 判断内存使用是否超过阈值
if (( $(echo "$MEMORY_GB > $CRITICAL_MEMORY" | bc -l) )); thenecho "内存使用超过临界值,当前内存使用量为: ${MEMORY_GB}GB"echo "执行重启命令..."# 在这里添加重启服务的命令,比如 Docker 容器重启命令# 重启服务的命令docker rm -f blade-jiangxinzhougarden# 延迟15秒sleep 15docker rmi yutu/blade-jiangxinzhougarden:2.8.2# 延迟15秒sleep 15docker-compose up -d blade-jiangxinzhougarden# 等待服务启动echo "等待服务启动..."# 以下是判断服务器是否已经成功启动的while循环代码# (注意:如果你没有需求则可以把以下的while代码删除)# 避免出现意外导致服务启动不起来,处于死循环状态# 一旦出现死循环就会给服务器资源造成负担while true; do# 判断服务器是否已经成功启动if docker ps | grep blade-jiangxinzhougarden; thenecho "服务已启动,继续后续操作"# 跳出while循环breakelseecho "服务尚未完全启动,继续等待..."sleep 10fidoneelseecho "内存使用正常,当前内存使用量为: ${MEMORY_GB}GB"
fi
2.授予执行权限
确保脚本文件有执行权限,可以在终端通过运行 chmod +x monitor_script.sh 给予执行权限。
chmod +x restart_jxz.sh
或者直接给予777权限,这个命令将会设置指定的文件为所有用户可读、可写、可执行。尽量避免过度赋予文件权限,因为这可能会造成安全风险。
chmod 777 restart_jxz.sh
3.配置定时任务
在终端执行crontab -e命令进入配置定时任务命令
crontab -e
进入后按下键盘的Ins键进入编辑模式,把以下内容复制进去即可在凌晨4点执行。
0 4 * * * /home/data/srv/restart_jxz.sh >> /home/data/srv/restart_jxz.log 2>&1
请替换 /home/data/srv/restart_jxz.sh 为实际脚本文件的路径,将脚本执行结果输出到指定的日志文件
/home/data/srv/restart_jxz.log 中。
编辑完成后按下键盘的Esc键,再按下Shift+;组合键,出现冒号后输入wq回车即可保存退出。
也记得给日志文件授予写入的权限