Shell脚本监控错误日志_shell tee 错误日志输出不到文件-程序员宅基地

技术标签: shell  shell脚本分享  

错误日志事需要写到指定的文件位置,写脚本监控监控日志文件发企业微信告警。
分享下监控日志文件的思路,就是记录每次读取到的行号
用crontab 每隔一段时间调用就好,有记录行号不怕重复发送日志

#!/bin/bash
#监控错误日志
set -e -u -o pipefail
row_number=0 #初始行号 这边用sed记录了行号 用于从上一次的位置开始读取

wx(){
    
#读取日志发送到企业微信 企业微信机器人使用方法 https://blog.csdn.net/weixin_46175620/article/details/106936957
cat > $0.msg << EOF
curl '' \
   -H 'Content-Type: application/json' \
   -d '
   {
        "msgtype": "text",
        "text": {
            "content": "$1",
            "mentioned_mobile_list":["$2"]
        }
   }'
EOF
sh $0.msg
}
#进入日志目录 根据实际需求定
cd /data/logs/$(ls /data/logs|grep "log")
#监控的日志文件 根据实际需求定
log_file="$(pwd)/log.err"
#文件的最新行号
new_row_number=$(cat $log_file|wc -l)

if [ "$new_row_number" -eq "$row_number" -o "$new_row_number" -eq 0 ] ;then
	#新行号等于记录行号说明日志没有新增,直接退出
	exit 0
elif [ "$new_row_number" -lt "$row_number" ] ; then
	#新行号小于旧行号,日志被归档从新开始写,修改旧行号为0,下一次从新的位置开始读
	#4s是因为行号记录在本脚本的第4行
	sed -i '4s/row_number='${row_number}'/row_number=0/' $0
	row_number=0
else
	#修改记录的行号为新的行号
	sed -i '4s/row_number='${row_number}'/row_number='${new_row_number}'/' $0
	#轮训每行日志 发送到企业微信
	while [ "$new_row_number" -gt "$row_number" ]; do
		row_number=$(expr $row_number + 1)
		info=$(sed -n "$row_number"p $log_file)
		#去除重复的日志
		if [ $(grep "$(echo $info)" $(pwd)/$0.msg|wc -l) -eq 0 ];then
			#判断和前一次发的告警信息不同 发送到企业微信 过滤规则根据需求更改
			#echo $info
			wx "$info" ""
		fi 
	done
fi

exit 0

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46175620/article/details/108265253

智能推荐

Qt--模拟按下按键(键盘)_qt按下一个按钮实现按某个键-程序员宅基地

文章浏览阅读6.5k次,点赞5次,收藏31次。一、前言最近在做QWT开发的时候碰到一个问题,QwtPlotZoomer提供的放大、缩小操作只支持鼠标事件或键盘事件,但是我希望通过点击软件上的按钮去响应放大、缩小操作,但是事件槽函数不是我写的,不知道怎么调用,所以就只能给放大、缩小操作写一个快捷键了。例如:点击键盘I键放大、O键缩小,然后只需要在软件按钮槽函数中模拟按下了I键和O键,就可以响应相应的放大、缩小操作了。二、具体操作//模拟按下键盘I键QWidget *receiver = QApplication::focusWidget();_qt按下一个按钮实现按某个键

【图形化编程】_图形化编程逻辑-程序员宅基地

文章浏览阅读765次,点赞6次,收藏17次。可视化编程 蓝图_图形化编程逻辑

发自肺腑深入肌肤 —— 一位武汉老程序员的自白-程序员宅基地

文章浏览阅读159次。我是一个对技术没有很大热情的程序员。即使在项目忙的时候我也不会加班很长时间,因为我觉得我的身体坐了一天了,它予我以生存,我必须善待它,但步行3公里回去吃完饭我还是会在各论坛上看看解决问题的最好办法,因为公司予我以饭碗,我必须对得起他,不断的学习只是因为单纯的觉得想要更好就必须学习,出于欲望而不是热情有时会走..._饭现在只能/ 发自肺腑t呢

卷积神经网络在图像重建任务中的应用-程序员宅基地

文章浏览阅读323次,点赞4次,收藏3次。1.背景介绍卷积神经网络(Convolutional Neural Networks,CNN)是一种深度学习模型,广泛应用于图像分类、目标检测、语音识别等多个领域。在图像重建任务中,卷积神经网络能够自动学习图像特征,从而实现高效的图像重建。图像重建是指从观测到的有限信息(如噪声图像、缺失图像或压缩图像)中恢复原始图像的过程。图像重建是计算机视觉领域的一个关键任务,具有广泛的应用前景,如图像...

你是否会被人工智能哭泣的声音所打动?| Mixlab 技术前沿-程序员宅基地

文章浏览阅读179次。#音频工程#、#AI语音技术#、#AI Deepfake#AI 语音——语音识别技术,与语音合成语音识别技术是指机器自动将人的语音,转成文字的技术,即ASR技术:Automatic S..._sonantic ai

arcgis for flex api version3.7 教程:5.使用Editor对地图进行编辑-程序员宅基地

文章浏览阅读1.5k次。ArcGIS的网络编辑操作(可以认为是网页端的相关地理处理操作)需要feature service来提供符号信息和几何数据信息。feature service允许你创建自定义的REST方法节点,用来存储和查询地理数据,如点、线和面。存储自定义的渲染规则和元数据信息,例如地名,评级,地址等。对存储的数据进行分析和计算。ArcGIS API for Flex提供的Featurelayer允许你获取

随便推点

(springmvc)页面找不到静态资源文件Failed to load resource: the server responded with a status of 404 (Not Found)-程序员宅基地

文章浏览阅读9w次,点赞21次,收藏32次。 今天打算整理之前写的一个插件功能上传到github,新建一个java项目,项目使用的是spring mvc框架,然后再调试页面的时候发现找不到静态资源文件,如下图所示: 于是我第一时间检查jsp上页面资源的路径:&lt;link rel="stylesheet" type="text/css" href="css/amazeui.min.css"&gt; &lt;link..._failed to load resource: the server responded with a status of 404 (not foun

OPEN3D学习笔记(一)——File IO & Point Cloud_open3d c++ 绘制 lineset-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏53次。OPEN3D学习笔记(一)安装File IOPointcloudMeshImagePointCloud可视化点云安装这个在linux下,按照官方教程给的提示,没出问题。其中换了清华镜像源可以快一点。File IOPointcloudprint("Testing IO for point cloud ...")pcd = o3d.io.read_point_cloud("../../TestData/fragment.pcd")print(pcd) # 可以打印这个点云的点数o3d.io.w_open3d c++ 绘制 lineset

记录开源Qt/Qml 作品链接_qml调用自定义mediaplayer-程序员宅基地

文章浏览阅读1.6k次。游戏2D地图编辑器:著名的TileMap编辑器,做2D游戏开发的一定不会陌生。 Go 语言的IDE:Go语言的集成开发环境。 Clementine Music Player:功能很完善且跨平台支持做得很好的音乐播放器,完成度高,跨平台项目可以参考它。 QtAV(FFmpeg的Qt封装):官网:http://www.qtav.org/FFmpeg的Qt封装,国人的作品,为你点赞! shotcut(视..._qml调用自定义mediaplayer

自动计算label字体的高度和图片拉伸处理(封装成分类分享)-程序员宅基地

文章浏览阅读66次。自动计算label字体的高度和图片拉伸处理自动计算label字体的高度下载地址(分类---功能实现模块封装):链接: http://pan.baidu.com/s/1kTyFi8R 密码: fm3m实现代码(封装成方法)-->实际上我们可以封装成分类,这样别的类中也可以调用- (CGSize)sizeWithFont:(UIFont *)font max..._c# label中图片显示拉伸

iOS开发笔记 -- 蓝牙开发_蓝牙appendbytes-程序员宅基地

文章浏览阅读263次。简述 最近在做一个蓝牙项目,由于之前并没有接触过蓝牙开发,开发的过程中 也遇到了很多的问题,在此 记录一下基本的概念和解决的方案。一、蓝牙的基本概念在蓝牙的通讯过程中涉及了两个主要的角色 -&amp;amp;amp;amp;gt; 中心设备和外围设备,外围设备 有其它设备所需要的数据,而中心设备 使用外围设备提供的数据完成特定的任务,简单理解 中心设备就是 扫描周围蓝牙硬件的设备,外围设备就是 被扫描的设..._蓝牙appendbytes

【Transformer-Hugging Face手册 07/10】 微调预训练模型_预训练模型的tokenizer的返回类型是batchencoding吗-程序员宅基地

文章浏览阅读983次,点赞49次,收藏12次。使用预训练模型有显着的好处。它可以降低计算成本和碳足迹,并允许您使用最先进的模型,而无需从头开始训练。 Transformers 提供了针对各种任务的数千个预训练模型的访问权限。当您使用预训练模型时,您可以在特定于您的任务的数据集上对其进行训练。这被称为微调,是一种非常强大的训练技术。_预训练模型的tokenizer的返回类型是batchencoding吗