shell脚本监控docker容器和supervisor 运行情况

1.ASR服务

需求:

在ASR服务器中

docker 以下操作中 忽略容器名字叫 nls-cloud-mongodb 的容器

在ASR服务器中

docker ps 查看正在运行的容器

docker stats -a --no-stream  可以监控容器所占资源 确认是否有pid且不等于0

docker inspect -f “{{.RestartCount}}” 容器名称 可以确认容器重启次数 容器名称由docker ps --format "{{.Names}}" 获取

#!/bin/bash#创建存储日志目录
logpath="log"
if [ -d "$logpath" ] ; thenecho "日志目录 $logpath 已存在!"
elsemkdir $logpathchmod  777 $logpathecho " 目录创建成功"
fi# 设置日志文件名,格式为 YYYY-MM-DD.log
LOG_FILE="./$logpath/asr_docker_info_$(date +'%Y-%m-%d').log"# 获取当前时间并格式化为年月日时分秒
CURRENT_DATETIME=$(date +'%Y-%m-%d %H:%M:%S')# 获取当前正在运行的 Docker 容器信息,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker ps 输出 ==========" >> "$LOG_FILE"
docker ps >> "$LOG_FILE"# 获取指定容器(这里以 mysql 为例)的 stats 信息,并检查是否有 PID 且不等于 0,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker stats 输出 ==========" >> "$LOG_FILE"
docker stats  --no-stream | awk 'NR>1 && $14 != "0" {print}' >> "$LOG_FILE"#这个列表是以字符串的形式输出的,每个容器名称以换行符分隔#NAMES=$(docker ps -a --format "{{.Names}}")#echo -n "容器列表名称: $NAMES" >> "$LOG_FILE"#for con in "${NAMES[@]}";do#  echo " 我是容器:$con"#done#换行符分割为数组
docker_names=$(docker ps -a --format '{{.Names}}')
names_array=(${docker_names//$'\n'/ })
length=${#names_array[@]}
echo  "所有容器列表名称:【 ${names_array[@]} 】,所有容器个数为:$length" >> "$LOG_FILE"# 现在你可以遍历 names_array 数组了
for container_name in "${names_array[@]}"; doif [ "$container_name" != "nls-cloud-mongodb" ];then#if [ "$container_name" != "suspicious_lewin" ];thenecho "容器名称:$container_name"PIDS=$(docker stats $container_name --no-stream | awk 'NR==2{print $14}')if [ $PIDS -eq 0 ];thenecho  " 注意!===> $container_name 容器PIDS为0:$PIDS" >> "$LOG_FILE"elif [ $PIDS -ne 0 ];thenecho  " $container_name 容器PIDS:$PIDS" >> "$LOG_FILE"fi# 获取指定容器(这里以 mysql 为例)的重启次数,并将结果追加写入日志文件#echo "========== $CURRENT_DATETIME - Docker inspect 输出 ==========" >> "$LOG_FILE"echo -n " $container_name 容器重启次数:" >> "$LOG_FILE"docker inspect -f "{{.RestartCount}}" $container_name  >> "$LOG_FILE"fi
done# 输出成功消息
echo "日志已写入日志文件: $LOG_FILE"
2. 监控MySQL容器运行情况记录到日志文件中,每天一个文件(简单版)

需求:

在 mysql服务器中

docker ps 查看正在运行的容器

docker stats mysql --no-stream  可以监控容器所占资源 确认是否有pid且不等于0

docker inspect -f “{{.RestartCount}}” mysql可以确认容器重启次数

#!/bin/bash# 设置日志文件名,格式为 YYYY-MM-DD.log
LOG_FILE="./log/mysql_docker_info_$(date +'%Y-%m-%d').log"# 获取当前时间并格式化为年月日时分秒
CURRENT_DATETIME=$(date +'%Y-%m-%d %H:%M:%S')# 获取当前正在运行的 Docker 容器信息,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker ps 输出 ==========" >> "$LOG_FILE"
docker ps >> "$LOG_FILE"# 获取指定容器(这里以 mysql 为例)的 stats 信息,并检查是否有 PID 且不等于 0,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker stats 输出 ==========" >> "$LOG_FILE"
docker stats mysql --no-stream | awk 'NR>1 && $14 != "0" {print}' >> "$LOG_FILE"PIDS=$(docker stats mysql --no-stream | awk 'NR==2{print $14}')
if [ $PIDS -eq 0 ]
thenecho  "MySQL容器PIDS为0:$PIDS" >> "$LOG_FILE"
elif [ $PIDS -ne 0 ]
thenecho  "MySQL容器PIDS:$PIDS" >> "$LOG_FILE"
fi# 获取指定容器(这里以 mysql 为例)的重启次数,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker inspect 输出 ==========" >> "$LOG_FILE"
echo -n "MySQL容器重启次数:" >> "$LOG_FILE"
docker inspect -f "{{.RestartCount}}" mysql  >> "$LOG_FILE"# 输出成功消息
echo "日志已写入日志文件: $LOG_FILE"
3.客户端服务器

需求:

执行 supervisorctl 在STARTING那一列状态全部都是RUNNING

#!/bin/bash#创建存储日志目录
logpath="log"
if [ -d "$logpath" ] ; thenecho "日志目录 $logpath 已存在!"
elsemkdir $logpathchmod  777 $logpathecho " 目录创建成功"
fi# 设置日志文件名,格式为 YYYY-MM-DD.log
LOG_FILE="./$logpath/supervisorctl_client_info_$(date +'%Y-%m-%d').log"# 获取当前时间并格式化为年月日时分秒
CURRENT_DATETIME=$(date +'%Y-%m-%d %H:%M:%S')# 获取当前正在运行的信息,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - supervisorctl 状态 输出 ==========" >> "$LOG_FILE"supervisorctl status all  >> "$LOG_FILE"# 执行 supervisorctl status 命令,并筛选出 STARTING 列不是 RUNNING 的行
CHECK_STATUS=$(supervisorctl status | awk '$2 != "RUNNING" {print $2}')
CHILD_NAME=$(supervisorctl status | awk '$2 != "RUNNING" {print $1}')
if [ "$CHECK_STATUS" != "RUNNING" ];thenecho "注意!存在没有运行的进程 ===> $CHILD_NAME " >> "$LOG_FILE"
elseecho "所有进程运行正常" >> "$LOG_FILE"
fi# 输出成功消息
echo "日志已写入日志文件: $LOG_FILE"

 

4.管理端服务器 

需求:

执行 supervisorctl 在STARTING那一列状态全部都是RUNNING (待确认)

docker ps 查看正在运行的容器

docker stats node_grpc --no-stream  可以监控容器所占资源 确认是否有pid且不等于0

docker inspect -f “{{.RestartCount}}” node_grpc可以确认容器重启次数

#!/bin/bash# 设置日志文件名,格式为 YYYY-MM-DD.log
LOG_FILE="./log/node_grpc_docker_info_$(date +'%Y-%m-%d').log"# 获取当前时间并格式化为年月日时分秒
CURRENT_DATETIME=$(date +'%Y-%m-%d %H:%M:%S')# 获取当前正在运行的信息,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - supervisorctl 状态 输出 ==========" >> "$LOG_FILE"supervisorctl status all  >> "$LOG_FILE"# 执行 supervisorctl status 命令,并筛选出 STARTING 列不是 RUNNING 的行
CHECK_STATUS=$(supervisorctl status | awk '$2 != "RUNNING" {print $2}')
CHILD_NAME=$(supervisorctl status | awk '$2 != "RUNNING" {print $1}')
if [ "$CHECK_STATUS" != "RUNNING" ];thenecho "注意!存在没有运行的进程 ===> $CHILD_NAME " >> "$LOG_FILE"
elseecho "所有进程运行正常" >> "$LOG_FILE"
fi# 获取当前正在运行的 Docker 容器信息,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker ps 输出 ==========" >> "$LOG_FILE"
docker ps >> "$LOG_FILE"# 获取指定容器(这里以 mysql 为例)的 stats 信息,并检查是否有 PID 且不等于 0,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker stats 输出 ==========" >> "$LOG_FILE"
docker stats node_grpc --no-stream | awk 'NR>1 && $14 != "0" {print}' >> "$LOG_FILE"PIDS=$(docker stats node_grpc --no-stream | awk 'NR==2{print $14}')
if [ $PIDS -eq 0 ]
thenecho  "node_grpc容器PIDS为0:$PIDS" >> "$LOG_FILE"
elif [ $PIDS -ne 0 ]
thenecho  "node_grpc容器PIDS:$PIDS" >> "$LOG_FILE"
fi# 获取指定容器(这里以 mysql 为例)的重启次数,并将结果追加写入日志文件
echo "========== $CURRENT_DATETIME - Docker inspect 输出 ==========" >> "$LOG_FILE"
echo -n "node_grpc容器重启次数:" >> "$LOG_FILE"
docker inspect -f "{{.RestartCount}}" node_grpc  >> "$LOG_FILE"# 输出成功消息
echo "日志已写入日志文件: $LOG_FILE"

 脚本下载地址:https://download.csdn.net/download/lxw1844912514/89455818

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

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

相关文章

为何Proteus用户争相拥抱SmartEDA?揭秘背后的强大吸引力!

在电路设计与仿真领域,Proteus一度以其稳定性能和丰富功能赢得了众多用户的青睐。然而,近年来,越来越多的Proteus用户开始转向SmartEDA,这一新兴电路仿真软件正迅速崭露头角,成为行业内的翘楚。那么,究竟是…

【Java】已解决java.util.ConcurrentModificationException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.util.ConcurrentModificationException异常 一、分析问题背景 java.util.ConcurrentModificationException异常是Java集合框架中常见的一个运行时异常。这个异常通常会…

llama-factory微调工具使用入门

一、定义 环境配置案例: https://zhuanlan.zhihu.com/p/695287607chatglm3 案例多卡训练deepspeedllama factory 案例Qwen1.5报错 二、实现 环境配置 git clone https://github.com/hiyouga/LLaMA-Factory.git conda create -n llama_factory python3.10 conda …

适合企业的TTS文本转语音接口:微软TTS最新模型,发布9种更真实的AI语音

微软对Azure Al语音服务的Personal Voice功能进行了升级,引入了新的零样本学习(zero-shot)的文本到语音(TTS)模型。与初始模型相比,这些新模型提高了合成语音的自然度,并更好地模仿了提示语音中的语音特征。 微软提供了超过400种神经语音&am…

视频监控管理平台智能边缘分析一体机安防监控平台离岗检测算法

在工业自动化和智能制造的背景下,智能边缘分析一体机的应用日益广泛。这些设备通常在关键岗位上执行监控、分析和数据处理任务。然而,设备的稳定运行至关重要,一旦发生故障或离岗,可能会导致生产线停滞甚至安全事故。因此&#xf…

llama-factory微调chatglm3

一、定义 案例/多卡 二、实现 案例 1. 下载chatglm3-6b-32k模型 2. 配置数据集微调指令 CUDA_VISIBLE_DEVICES0,1 llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path /home/chatglm3-6b-32k \--finetuning_type lora \--template chatglm3 \--d…

LeetCode 算法:回文链表 c++

原题链接🔗:回文链表 难度:简单⭐️ 题目 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head…

spdlog学习笔记

学习spdlog的一些记录 项目下载 git clone https://github.com/gabime/spdlog.git 创建异步日志器 void initSpdlog(const std::string& strPath) {std::string strLogPath strPath "/logs/skyense.log";// 异步就一定需要线程或线程池日志队列,这里给一个线…

1:25万基础电子地图(重庆版)

我们为你分享过四川版、江西版和贵州版的1:25万基础电子地图,现在再为你分享重庆版的电子地图。 现在我们再为你分享重庆的1:25万基础电子地图,你可以在文末查看该数据的领取方法。 基础电子地图重庆版 下载后可以看到该数据由14个压缩包所…

Windows11电脑在使用GPU的时候有时候会卡顿

原来我一直以为是电脑的某些组件可能坏掉了 但是后来发现通过更新gpu的驱动可以让它变好: NVIDIA GeForce 驱动程序 - N 卡驱动 | NVIDIA 下载好以后,然后安装最新的驱动就可以了,感觉可能是因为win11和某些需要显卡的驱动不支持的原因吧 …

2024前端面试准备5-React相关

1. React 事件机制 ​ React并不是直接把事件绑定到div的真实DOM上的,而是在document(>16绑定的document,17开始绑定到root元素,方便微前端处理)处通过事件代理的方式,统一绑定了所有事件,然后根据冒泡上来的事件,…

Flash基础知识

1、Flash发展历程 存储器通常分为两类型,即随机存取的RAM(内存)与只读的ROM(外存)。 RAM,也称随机存取存储器,数据可以被读取和修改。它主要用于存储正在运行的程序和临时数据,是计…

redis穿透解决方案

Redis缓存穿透是指查询一个不存在于数据库中的数据(通常是恶意用户发起的连续请求),由于缓存中没有,每次请求都会穿透到数据库,这可能会对数据库造成不必要的压力。解决缓存穿透问题的常见策略包括: …

CarService的构成和初始化分析

以下分析,基于安卓13的AAOS。 代码构成 packages/services/Car CarService相关代码,主要是在这个目录下 frameworks/opt/car/services 主要是carservice启动相关。 其它目录:audio_policy_configuration.xml和car_audio_configuration.xm…

Unity Texture2D读取像素时出错问题

Texture2D在读取像素处理时,经常会出错,这个时候可以用如下函数先转换: public Texture2D DeCompress(Texture2D source){RenderTexture renderTex RenderTexture.GetTemporary(source.width,source.height,0,RenderTextureFormat.Default,R…

leetcode-12-[226]翻转二叉树[101]对称二叉树[104]二叉树的最大深度[111]二叉树的最小深度

前置知识: 深度:任意节点到根节点的节点数 高度:任意节点到叶子节点(左右孩子都为空)的节点数 一、[226]翻转二叉树 重点:交换节点应该传入根节点 class Solution {public TreeNode invertTree(TreeNo…

JSON学习

一、JSON 1.1 简介 JSON:JavaScript Object Notation是一种表示对象的方式 基于JavaScript语言的轻量级的数据交换格式;(即:用来传输数据的一种格式) 现在传输数据的方式更多是采用json的格式,渐渐代替了XML 1.2 JSON的数据表示 …

人生的乐趣,在于对真知的追求

子曰:朝闻道,夕死可矣! 孔子说:早上听到关于世界的真理,哪怕晚上就die了都可以。 这句话很有力量而经常被人引用,表达出我们如何看待沉重的肉身和精神世界。 我们的生活目的:道。 —— 要了解…

MongoDB查询

一、find 1、简单查询 #查寻所有文档 >db.foo.find()#查询包含namehgq的文档 >db.foo.find({"name":"hgq"}) #查询包含namehgq,age12的文档,默认为全部条件都匹配 >db.foo.find({"name":"hgq","…

探究 IP 地址被网站封禁的原因

在我们登录各种网站、APP浏览时,可能会遇到 IP 地址被某些网站封禁的情况。很多人奇怪这是为什么呢? 首先,违反网站的使用规则是比较常见的原因之一。比如,频繁发送垃圾邮件、恶意评论、进行网络攻击或试图破解网站的安全机制等不…