shell邮件功能-2

news/发布时间2024/5/12 1:58:35

场景:应用服务域名对应多台负载机,当某台出现CPU或RAM资源阻塞时,如果服务器并未死机,根据负载策略(类似 ping或telnet),服务器可能仍然是可用的,新的访问仍然有分配到这台机器处理的可能,但实际又不可用,体验不好,且不能及时发送故障通知。新的负载策略是访问指定页面(类似curl命令),检查返回结果中是否有关键字,来判断服务是否正常,如果不正常,则从应用集群中踢掉这台机器,待恢复正常后再加入。但当时踢掉后没有邮件通知功能,就做了个脚本来监控。

  上一版脚本在每一台上部署,当出现机器资源耗尽时,邮件阻塞,出现重复发送的情况,故而改进了一下脚本,将其部署到一台不提供负载的服务器上。

1.通知脚本-notice.sh

 1 #!/bin/bash
 2 dir=/root/myhome
 3 hosts=("192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4")
 4 keyword="记住用户"
 5 users=("11@qq.com 22@qq.com")
 6 
 7 # 发送邮件的函数
 8 send_email() {
 9 to=$users
10 subject="$j service unreachable"
11 body="URL: $url\n服务异常,\n断言关键字: $keyword\n"
12 echo -e "$body" | mail -s "$subject" "$to"
13 }
14 
15 disable_flag(){
16 sed -i "s/$j=\(y\)/$j=n/" "$dir/s.flag"
17 echo "`date`:$j===>>>alter flag to n"
18 }
19 
20 enable_flag(){
21 sed -i "s/$j=\(n\)/$j=y/" "$dir/s.flag"
22 echo "`date`:$j===>>>alter flag to y"
23 }
24 
25 # 使用 curl 请求 URL 并检查返回结果是否包含关键字
26 for j in $hosts;do
27 sendFlag=`cat $dir/s.flag | grep ^$j | rev | cut -c 1`
28 if [[ $sendFlag = y ]];then
29 url="http://$j:8888/mydemo/home"
30 response=$(curl -s "$url")
31 if [[ $response =~ $keyword ]];then
32 echo "`date`:$j===>>>curl 找到关键字"
33 else
34 echo "`date`:$j===>>>curl 未找到关键字"
35 disable_flag
36 for i in "$users"
37 do
38 send_email
39 done
40 fi
41 else
42 echo "`date`:$j===>>>发送标志是$sendFlag,不再重复发送"
43 fi
44 done

 

2.开启发送标志的shell

 1 #!/bin/bash
 2 hosts=("192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4")
 3 dir=/root/myhome
 4 enable_flag(){
 5 sed -i "s/$j=\(n\)/$j=y/" "$dir/s.flag"
 6 echo "`date`:$j===>>>alter flag to y"
 7 }
 8 
 9 for j in $hosts;do
10 sendFlag=`cat $dir/s.flag | grep ^$j | rev | cut -c 1`
11 if [[ $sendFlag = n ]];then
12 enable_flag
13 else
14 echo "`date`:$j===>>> flag is y,nothing to do"
15 fi
16 done

3. s.flag文件内容

192.168.1.1=y
192.168.1.2=y
192.168.1.3=y
192.168.1.4=y

4.crondtab配置

*/2 3-23,0-1 * * * sh /root/myhome/notice2.sh >> /root/myhome/check.log 2>&1
0 7 * * * sh /root/myhome/enable_flag.sh >> /root/myhome/check.log 2>&1

 

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

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

相关文章

American Aptio主板BIOS看不到优盘设备的一种解决办法

启动项列表里只有硬盘和网络设备,看不到优盘设备 尝试后找到的一种解决办法: Chipset->PCH-IO Configuration->USB Configuration:EHCI1和EHCI2两个通道关闭其中一个, 即一个设置为Enable,另一个Disable。 同时关闭或开启都会导致看不到优盘设备。设置完成后重新启动进…

如何基于容器网络流量指标进行弹性伸缩

通过cAdvisor提供的容器网络流量指标实现业务峰谷期间的弹性扩缩容。本文分享自华为云社区《【自定义指标HPA】基于容器网络流量指标进行弹性伸缩》,作者: 可以交个朋友。一、背景 业务程序非CPU、memeory敏感类业务,希望可以基于流量指标进行HPA弹性伸缩,但是大部分程序并…

Java 8 Supplier函数式接口介绍及代码样例

介绍 供应商接口(Supplier Interface)是 Java 8 引入的 java.util.function 包的一部分,用于在 Java 中实现函数式编程。它表示一个函数,该函数不接收任何参数,但会产生一个类型为 T 的值。 T:表示结果的类型 分配给 Supplier 类型对象的 lambda 表达式用于定义其 get(),…

MongoDB Server 用户名和密码登录

一、前言# 默认情况下,MongoDB实例启动运行时是没有启用用户访问权限控制的,也就是说,在实例本机服务器上都可以随意连接到实例进行各种操作,MongoDB不会对连接客户端进行用户验证,这是非常危险的 MongoDB Server默认不进行安全认证,即任何MongoDB Client都可以连接并拥有…

自我介绍+软工五问

作业要求这个作业属于哪个课程 软件工程2024这个作业要求在哪里 自我介绍+软工5问这个作业的目标 1. 注册一个博客园和Github账号,学习markdown文档的编写 2. 快速阅读教材并提出五个问题,让我们快速了解所学内容并对此进行思考。自我介绍 我叫徐天,来自黑龙江省。原本的专业…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记02_大数据

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记02_大数据1. 大数据分析 1.1. 随着“大数据军备竞赛”与定价算法的广泛应用,线上购物平台与实体商铺的界限也变得越来越模糊 1.2. 在沃尔玛疯狂扩张的时代,它给地区性商业带来的伤害不亚于一场地震 1.2…