shell脚本实现服务监控报警并重启

article/2025/10/29 15:24:20

第一篇    使用crontab指令的shell脚本实现服务监控报警重启

 

 这两天做了一个服务监控报警重启的脚本。本质就是用一个shell命令去监控服务状态,如果宕机就会自动重启,并向指定邮箱发送邮件对管理人员进行提醒,再使用crontab命令设置每隔一分钟运行一次这个shell脚本,实现对服务的监控。

    本来很简单,以为半天就能实现,结果问题出在了发送邮件上,硬生生的搞了两天,才在部门其他大神的帮助下搞定,所以在此总结下。

    首先先写一个简单的监控服务的shell脚本,公司在服务器上跑的是以jar包的形式,为了方便测试,我就随便找了一个jar包,命名为1.jar

    直接新建编辑一个moni.sh 脚本文件

vi moni.sh

在moni.sh中进行编辑

run=$(ps -ef |grep "1.jar" |grep -v "grep")        
if [ "$run" ] ; then 
echo "The service is alive!" 
else
echo "系统宕机" | mail -s "警告" 2364******@qq.com    #接收人邮箱地址
echo "The service was shutdown!" 
echo "Starting service ..." 
nohup java -jar 1.jar & 
echo "The service was started!" 
fi 

再对crontab命令进行设置

crontab -e

直接会进入编辑页面,输入以下代码设置间隔时间自动运行

*/1****bash /home/wangzh/moni.sh               #设置为每间隔1分钟执行一次脚本
@reboot nohup java -jar 1.jar &                #每当系统重启时都会自动运行服务

    linux发送邮件很简单,它自带有发送邮件的mail,一开始我使用mail进行发送邮件发现不成功;就想通过linux的sendmail来发送,这个需要使用yum下载sendmail的rpm包,且配置十分麻烦,最后由于种种原因放弃了,回归linux自带的mail发送邮件方式。

    首先,要对 etc 下的 mail.rc进行编辑

vim /etc/mail.rc

进入编辑页面后,在其中添加以下配置信息

set from=xxxx@126.com                                #对方收到邮件后显示的发送人set smtp=smtp.126.com#你发送邮件的邮箱服务器地址set smtp-auth-user=xx@126.com#发件人的邮箱set smtp-auth-password=xxx#开启你邮箱中运行第三方发送的授权码,填写授权码set smtp-auth=login

    保存退出后,输入以下发送邮件命令进行测试

(我的个人经验,主题不要用英文,内容不限但不能写test,容易被当成垃圾邮件直接被第三方邮件服务器拦截)

echo "邮件内容" | mail -s "邮件主题" 2364600***@qq.com             #邮箱为接收人邮箱,邮箱服务器地址跟你发件人邮箱有关,接收人邮箱并无限制

 

    到此基本功能都实现了。但问题出在了发送邮件上面。发送邮件屡次不成功,一开始执行命令后,不弹出错误信息,也收不到邮箱,后来开始报 timed out,也报过一些诸如535这样的错误代码,中间排除了许多可能,最后把错误定位到端口号上。

    首先,linux的发送邮件端口默认的是25,。而我们公司是在阿里云服务上运行的,阿里云默认把发邮件的25端口给禁了,好像是怕不安全。然后,我们就只能使用阿里云提供的另外的邮件端口:使用TSL加密协议,也就是465端口。

    TSL也就是使用SSL加密的方式,使用465或者其他端口来发送邮件,现在大部分邮箱都支持SSL,具体SSL的端口 地址,也可以查百度,我使用的是163邮箱是465端口。既然使用的是SSL协议,那当然是要有证书的了,下面是获取证书的命令:

    先创建一个证书的存放目录(.cert加了一个.是隐藏目录的意思,具体需不需要隐藏,我也不知道,网上教程使用的隐藏)

mkdir -p /home/wangzh/.certs/                         //放到绝对路径下

再以此输入以下命令:

echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt  #如果你使用的是其他邮箱,这里需要你自己改成其他的邮箱服务器地址和端口号
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /home/wangzh/.certs

命令执行完毕后,如果不报错,就会看到以下文件:

然后有了证书文件,我们还需要在etc/mail.rc中编辑代码获取证书文件

vim /etc/mail.rc

在mail.rc中添加以下代码:

set ssl-verify=ignore
set nss-config-dir=/home/wangzh/.certs          #这个路径是你自己的certs存放的路径

保存退出。一切ok!

 

 

第二篇 Linux上用cron定时任务加Shell脚本实现判断服务挂掉宕机后自动重启服务

 

1、安装cron

一般买的云服务器上都会自带有cron的

但是如果没有安装的话,分别执行下边两个命令进行安装
yum -y install vixie-cron
yum -y install crontabs

安装好了以后,可以通过以下命令开启、关闭定时任务,以及查看crontab的状态

service crond start     //启动服务
service crond stop      //关闭服务
service crond restart   //重启服务
service crond reload    //重新载入配置
service crond status    //查看crontab服务状态

开启定时任务服务后 用这个命令 service crond status 来查看一下

可以看到已经启动了

2、编写定时任务需要执行的启动脚本

 
  1. 以下是我服务器上的一个服务的定时任务的脚本内容:仅供参考

  2. #--------------------------------------------------------------------------------------

  3. #查询wx_pay进程个数:wc -l 返回行数

  4. count=`ps -ef | grep wx_pay-0.0.1-SNAPSHOT.jar | grep -v "grep" | wc -l`

  5. #echo $count

  6.  
  7. sec=7

  8. nowtime=`date +"%Y-%m-%d %H:%M:%S"`

  9. nowDate=`date +"%Y-%m-%d"`

  10. #开始一个循环,以判断进程是否关闭

  11. for var in 1 2

  12. do

  13. if [ $count -gt 0 ]; then

  14. #若进程还未关闭,则脚本sleep几秒

  15. echo sleep $sec second the $var time, the wx_pay_Thread is still alive

  16. sleep $sec

  17. else

  18. #若进程已经关闭,则重启,并出循环

  19. cd /cj/wxpay

  20. nohup java -jar wx_pay-0.0.1-SNAPSHOT.jar > nohup.log 2&>wx_pay-$nowDate.log &

  21. echo $nowtime" start wx_pay-0.0.1-SNAPSHOT.jar"

  22. echo "ok! is success!"

  23. echo ""

  24. break

  25. fi

  26. done

  27.  
  28. #--------------------------------------------------------------------------------------

3、把写的定时任务脚本加入crontab定时任务列表

输入命令:crontab -e

把定时任务脚本添加进去

#一分钟检查一次,然后把重新启动的日志追加至restart.log中

*/1 * * * * /cj/wxpay/wx_pay_restart.sh  >> /cj/wxpay/restart.log

4、配置好了以后可以看下效果

如果当前的服务进程没有挂掉,它会打印出

sleep 7 second the 1 time, the wx_pay_Thread is still alive

然后7秒以后会再次去尝试着看下进程是否存活,如果还是存活就打印出

sleep 7 second the 2 time, the wx_pay_Thread is still alive

然后进入下一次定时任务的轮询

然后咱们把对应的服务kill掉以后,来看一下它会不会自动重启

可以看到当前的服务已经被kill掉了,是没有启动的

一分钟左右(我设置的cron任务是一分钟执行一次)定时任务执行后,再看下。

可以看到定时任务执行后,打印出了启动成功!

再 ps 看一下对应的服务是否启动了,可以看到对应的服务已经启动了。

这样就实现了服务宕机挂掉后,自动检测并自动重启


http://chatgpt.dhexx.cn/article/TibWQftg.shtml

相关文章

Zabbix +Grafana 服务器监控体系

无监控,不运维。废话不多说,下面都是干货 官方地址: https://www.zabbix.com/cn/download 声明 使用的是zabbix6.0.7版本。Mysql 8.0.26。演示使用的系统镜像为rocky linux 8.6 --------------------------------------------Zabbix--------…

SpringBoot整合Admin服务监控(图文详细)

SpringBoot整合Admin服务监控组件 1 SpringBootAdmin 简介 1.1 概述 SpringBootAdmin 是一个非常好用的监控和管理的开源组件,该组件能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功…

windows下的文件服务器监控

windows下的文件服务器监控 一、使用Windows自带的管理工具进行查看当前服务器连接的用户及打开的文件,但是该功能比较简单,无法对文件进行监控,比如什么时间哪个用户连接到共享文件夹对该文件夹的文件进行过什么操作。 二、使用工具软件 …

java项目实现服务器监控,Java实现服务器状态监控

Java实现服务器状态监控 内容精选 换一换 云容器实例(Cloud Container Instance,CCI)服务提供 Serverless Container(无服务器容器)引擎,让您无需创建和管理服务器集群即可直接运行容器。Serverless 是一种架构理念,是指不用创建和管理服务器、不用担心服务器的运行状态(服务…

安利一款免费、开源、实时的服务器监控工具:Netdata

Netdata 是一个免费、开源、实时的服务器监控工具,可以可视化和监控实时数据,如 CPU 使用率、RAM 使用率、负载、SWAP 使用率、带宽使用率、磁盘使用率等。它可以帮助系统管理员了解您的系统或应用程序中正在发生的事情以及刚刚发生的事情。它可以安装在…

Spring Boot服务监控(Prometheus)

哲学 最近看到了一句话:定乎内外之分 辩乎荣辱之境。 一个外国作家也说过: 我生命里的的最大突破之一,就是我不再为别人的看法而担忧。此后,我真的能自由的去做我认为对自己最好的事,只有在我们不需要外来的赞许时&…

几种服务器监控系统,几种服务器监控系统

几种服务器监控系统 内容精选 换一换 设置“云服务器名称”。名称可自定义,但需符合命名规则:只能由中文字符、英文字母、数字及“_”、“-”、“.”组成。如果同时购买多台弹性云服务器,系统会自动按序增加后缀。一次创建多台弹性云服务器时…

无线监控设置smtp服务器,监控smtp服务器

监控smtp服务器 内容精选 换一换 华为云提供了云监控服务,您可以使用该服务监控弹性云服务器,在您开通了弹性云服务器后,云监控服务将自动实时监控并根据您设置的告警预置触发告警和通知,帮助您更好地了解弹性云服务器的各项性能指…

对微服务的监控的两种办法(springbootAdmin、prometheus+grafana)

1、springboot-admin实现对服务的监控 一、actuator客户端(即每一个需要监控的微服务) 1、在业务微服务中引入jar包 <!-- 引入Actuator监控依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-…

语言模型BERT理解

一、BERT概述 BERT是由Google在2018年提出的一种预训练语言模型。BERT的创新之处在于采用了双向Transformer编码器来生成上下文相关的词向量表示。 传统的单向语言模型只考虑了左侧或右侧的上下文信息&#xff0c;而BERT则同时考虑了左侧和右侧的上下文信息&#xff0c;使得生…

【BERT类预训练模型整理】

BERT类预训练模型整理 1.BERT的相关内容1.1 BERT的预训练技术1.1.1 掩码机制1.1.2 NSP&#xff08; Next Sentence Prediction&#xff09; 1.2 BERT模型的局限性 2. RoBERTa的相关内容2.1 RoBERTa的预训练技术2.1.1动态掩码&#xff08;Dynamic Masking&#xff09;2.1.2取消N…

(四)目标检测yolov5-6.0模型训练

安装好yolov5-6.0环境后 1.数据结构格式 文件夹结构&#xff1a;新建coco128 images文件夹下的train与val都是图像 labels文件夹下的train与val都是yolo格式的txt标签文件 2.修改配置文件 第一个需要修改的文件data/coco128.yaml 修改数据集路径&#xff1a; 例如&#xf…

caffe 训练自己的分类模型

学习caffe的最终目的&#xff0c;是可以利用自己的数据集&#xff0c;训练模型&#xff0c;并解决实际问题。 所以在前面跑通了mnist和cifar-10例程的基础上&#xff0c;尝试训练自己的模型&#xff0c;从头到尾走一遍所有的流程。准备数据、训练并得到模型&#xff0c;利用模…

bert中文分类模型训练+推理+部署

文章预览&#xff1a; 0. bert简介1. bert结构1. bert中文分类模型训练1 下载bert项目代码代码结构 2 下载中文预训练模型3 制作中文训练数据集 2. bert模型推理1.tensorflow推理 2. onnxruntime推理1. checkpoint格式转换为saveModel格式2. saveModel格式转换为onnx格式3. 使用…

Bert模型详解和训练实例

前面已经介绍了transformer&#xff0c;理解了transformer&#xff0c;那么理解bert就简单多了。对transformer不是很了解的可以跳转到https://blog.csdn.net/one_super_dreamer/article/details/105181690 bert的核心代码解读在https://blog.csdn.net/one_super_dreamer/arti…

无监督模型 训练过程_监督使用训练模型

无监督模型 训练过程 Machine Learning, Artificial Intelligence, and Deep Learning are some of the most complex, yet highly demanded fields of expertise today. There are innumerable resources and tools to work in these fields, and one such popular tool is Su…

Tensorflow V2 图像识别模型训练流程

Tensorflow V2.0 图像识别教程 代码&#xff1a; https://github.com/dwSun/classification-tutorial.git 教程参考官方专家高级教程&#xff1a; https://tensorflow.google.cn/tutorials/quickstart/advanced?hlen 这里以 TinyMind 《汉字书法识别》比赛数据为例&#xf…

(三)mmclassification图像分类——模型训练

&#xff08;三&#xff09;mmclassification图像分类——模型训练和测试 1.模型训练1.1使用预训练模型1.2使用自己的数据训练1.2.1制作数据集1.2.2修改模型参数&#xff08;configs文件&#xff09;(1)models(2)datasets(3)schedules(4)新建mobilenet_v2_b32x8_car.py 1.3训练…

tensorflow CNN模型训练+优化参数+实战

训练线性函数 import numpy as np import tensorflow.keras as keras # 构建模型 model keras.Sequential([keras.layers.Dense(units1,input_shape[1])]) # optimizer优化&#xff0c;loss损失 model.compile(optimizersgd, lossmean_squared_error) #准备训练数据 xsnp.ar…

nanodet训练手势识别模型

序言 前段时间nanodet爆火&#xff0c;以非常小的模型和运算量&#xff0c;取得了超过tiny-yolov4的精度&#xff0c;非常惊艳&#xff0c;因为时间问题一直没有尝试&#xff0c;最近有空决定尝试一下。先来看下作者给的模型效果 一、nanodet安装 首先安装nanodet的环境包…