Linux中判断某个Docker容器服务的内存是否超过临界值,比如到达10G,则在凌晨4点执行定时任务执行重新构建命令

news2024/9/23 13:21:41

监测NAME是blade-jiangxinzhougarden的服务,如果内存(MEM USAGE)超过10G则在凌晨4点执行重新构建命令

在这里插入图片描述

1.编写脚本文件restart_jxz.sh

#!/bin/bash

# 设置要监控的容器名称或服务名称(替换成你的服务名)
SERVICE_NAME="blade-jiangxinzhougarden"

# 获取服务的内存使用情况,这里假设服务对应的容器名称为 $SERVICE_NAME  将内存使用量转换为 GB
MEMORY_USAGE=$(docker stats --no-stream --format "{{.MemUsage}}" $SERVICE_NAME | awk '{ memory = $1; sub(/GiB/, "", memory); print memory }')

# 设置内存阈值 不超过10G
CRITICAL_MEMORY=10

# 判断内存使用是否超过阈值
if (( $(echo "$MEMORY_USAGE > $CRITICAL_MEMORY" | bc -l) )); then
    echo "内存使用超过临界值,当前内存使用量为: ${MEMORY_USAGE}GB"
    echo "执行重启命令..."

    # 在这里添加重启服务的命令,比如 Docker 容器重启命令
    # 重启服务的命令
	docker rm -f blade-jiangxinzhougarden
	# 延迟15秒
	sleep 15
	docker rmi yutu/blade-jiangxinzhougarden:2.8.2
	# 延迟15秒
	sleep 15
	docker-compose up -d blade-jiangxinzhougarden
	
	# 等待服务启动
	echo "等待服务启动..."

	#  以下是判断服务器是否已经成功启动的while循环代码
	# (注意:如果你没有需求则可以把以下的while代码删除)
	#  避免出现意外导致服务启动不起来,处于死循环状态
	#  一旦出现死循环就会给服务器资源造成负担
	while true; do
		# 判断服务器是否已经成功启动
		if docker ps | grep blade-jiangxinzhougarden; then
			echo "服务已启动,继续后续操作"
			# 跳出while循环
			break
		else
			echo "服务尚未完全启动,继续等待..."
			sleep 10
		fi
	done

else
    echo "内存使用正常,当前内存使用量为: ${MEMORY_USAGE}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回车即可保存退出。

也记得给日志文件授予写入的权限

常见问题

如果出现以下报错,可能是因为脚本文件中包含了 Windows 下的换行符(\r\n)而不是 Unix 下的换行符(\n)导致的。这种情况下,系统会将 \r 当作命令的一部分,导致解释器无法找到对应的文件或目录。

/bin/sh: /home/data/srv/restart_jxz.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录

要解决这个问题,你可以使用 dos2unix 命令将文件转换为 Unix 格式。在终端中执行以下命令:

dos2unix /home/data/srv/restart_jxz.sh

这会将 restart_jxz.sh 文件转换为 Unix 格式,去除 Windows 换行符。然后再次运行定时任务,看看是否能够成功执行脚本。

如果你的系统没有安装 dos2unix 命令,你可以尝试使用 sed 命令来替换换行符。你可以执行以下命令:

sed -i 's/\r//' /home/data/srv/restart_jxz.sh

这样也可以将文件中的 Windows 换行符替换为 Unix 换行符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1527010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringSecurity(SpringBoot2.X版本实现)

资料来源于 SpringSecurity框架教程-Spring SecurityJWT实现项目级前端分离认证授权 侵权删 目录 介绍 快速开始 认证 认证流程 登录校验流程 SpringSecurity完整流程 认证流程详解 代码实现 准备工作 mysql mybatis-plus redis 统一返回类 核心代码 密码加密存…

前端UI框架是不是大厂给中小企业“画地为牢”?

先说结论:不能说全是吧,但也大部分是。大厂赏饭(开源)给你吃,你就得按照他的规矩来。 一、大厂为什么喜欢开源 大厂愿意开源他们的前端框架有以下几个原因: 社区贡献:开源框架可以吸引更多的开…

【简写Mybatis】04-数据源的解析、创建和使用

前言 在学习MyBatis源码文章中,斗胆想将其讲明白;故有此文章,如有问题,不吝指教! 注意: 学习源码一定一定不要太关注代码的编写,而是注意代码实现思想; 通过设问方式来体现代码中的…

Redis中的String编码转换底层原理及6.0新特性

String编码转换底层原理 String对象为什么把大于39字节或者44字节的字符串编码为raw,小于的时候编码为embstr? 在Redis3.2以前的版本中,SDS作为字符串类型中存储字符串内容的结构,源码如下: 3.2版本SDS结构 struct sdshdr {// 记录buf数…

【DFS】树的重心

树的邻接表 存储方式 int N; int h[N];//存以N为编号的节点的下一个节点的idx int e[2N];//存idx的节点的编号 int nex[2N];//存idx节点的下一个节点的idxvoid add(int a, int b){ e[idx] b; nex[idx] h[a]; h[a]idx; }dfs遍历方式: void dfs(int u){state[u]…

day6 3/18

2.试编程: 封装一个动物的基类,类中有私有成员:姓名,颜色,指针成员年纪 再封装一个狗这样类,共有继承于动物类,自己拓展的私有成员有:指针成员:腿的个数(整…

sqllab第二十四关通关笔记

知识点: 二次注入 先埋一个炸弹,然后通过其他路径引爆它 查看界面发现是一个登录框,尝试进行登录框的注入发现这里不存在注入点 那么就注册一个新的账户吧 通过点击注册,进入注册面板,注册一个新的账户 用户名为 re…

【算法】多路归并(鱼塘钓鱼)

有 N 个鱼塘排成一排,每个鱼塘中有一定数量的鱼,例如:N5 时,如下表: 鱼塘编号12345第1分钟能钓到的鱼的数量(1..1000)101420169每钓鱼1分钟钓鱼数的减少量(1..100)24653当前鱼塘到下…

【Java 并发】AbstractQueuedSynchronizer 中的 Condition

1 简介 任何一个 Java 对象都天然继承于 Object 类, 在线程间实现通信的往往会应用到 Object 的几个方法, 比如 wait(), wait(long timeout), wait(long timeout, int nanos) 与 notify(), notifyAll() 几个方法实现等待 / 通知机制。同样的, 在 Java Lock 体系下也有同样的方…

代码随想录算法训练营第day27|93.复原IP地址 、 78.子集 、 90.子集II

93.复原IP地址 93. 复原 IP 地址 - 力扣(LeetCode) 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 …

AI论文速读 | UniTS:构建统一的时间序列模型

题目:UniTS: Building a Unified Time Series Model 作者:Shanghua Gao(高尚华), Teddy Koker, Owen Queen, Thomas Hartvigsen, Theodoros Tsiligkaridis, Marinka Zitnik 机构:哈佛大学(Harvard&#x…

学完排序算法,终于知道用什么方法给监考完收上来的试卷排序……

由于每个老师批改完卷子之后装袋不一定是有序的,鼠鼠我被拉去当给试卷排序的苦力。面对堆积成山的试卷袋,每一份试卷袋的试卷集又很重,鼠鼠我啊为了尽早下班,决定用一种良好的办法进行排序。 1.插入排序 首先考虑的是插入排序。…

Python 井字棋游戏

井字棋是一种在3 * 3格子上进行的连珠游戏,又称井字游戏。井字棋的游戏有两名玩家,其中一个玩家画圈,另一个玩家画叉,轮流在3 * 3格子上画上自己的符号,最先在横向、纵向、或斜线方向连成一条线的人为胜利方。如图1所示…

阿里云-零基础入门NLP【基于机器学习的文本分类】

文章目录 学习过程赛题理解学习目标赛题数据数据标签评测指标解题思路TF-IDF介绍TF-IDF 机器学习分类器TF-IDF LinearSVCTF-IDF LGBMClassifier 学习过程 20年当时自身功底是比较零基础(会写些基础的Python[三个科学计算包]数据分析),一开始看这块其实挺懵的&am…

【C语言】数9的个数

编写程序数一下 1到 100 的所有整数中出现多少个数字9 1,首先产生1~100的数字。然猴设法得到数9个数,例如个位:19%109,十位:91/109。 2,每次得到数九的时候,就用一个变量来进行计数。 代码如…

Python--成员方法、@staticmethod将成员方法静态化、self参数释义

在 Python 中,成员方法是指定义在类中的函数,用于操作类的实例对象。成员方法通过第一个参数通常命名为 self,用来表示调用该方法的实例对象本身。通过成员方法,可以实现类的行为和功能。 成员方法的定义 在类中定义成员…

苍穹外卖-day10:Spring Task、订单状态定时处理、来单提醒(WebSocket的应用)、客户催单(WebSocket的应用)

苍穹外卖-day10 课程内容 Spring Task订单状态定时处理WebSocket来单提醒客户催单 功能实现:订单状态定时处理、来单提醒和客户催单 订单状态定时处理: 来单提醒: 客户催单: 1. Spring Task 1.1 介绍 Spring Task 是Spring框…

电脑装win11(作si版)

装win11经历 前言:因为我的u盘今天到了,迫不及待试试装机 然后在一系列准备好工具后,便是开始拿学校的机房电脑来试试手了~~ 前期准备 下载好win11镜像(可以去微软官网下载) 下载Rufus工具 https://www.lanzoue.com/…

2023年度VSCode主题推荐(个人常用主题存档)

前言 早在2018年的时候发了一篇关于VSCode主题风格推荐——VS Code 主题风格设置,时过境迁,如今常用的主题皮肤早已更替。 今天下午在整理VSCode插件的时候,不小心把常用的那款(亮色)主题插件给删除了,无…

配置OGG 如何批量修改源端及目标端序列值_满足客户变态需求学会这招你就赚了

欢迎您关注我的公众号【尚雷的驿站】 **************************************************************************** 公众号:尚雷的驿站 CSDN :https://blog.csdn.net/shlei5580 墨天轮:https://www.modb.pro/u/2436 PGFans:ht…