首页 > 系统相关 >shell邮件功能-2

shell邮件功能-2

时间:2024-03-06 14:38:06浏览次数:18  
标签:功能 shell 192.168 echo flag dir date root 邮件

场景:应用服务域名对应多台负载机,当某台出现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=("[email protected] [email protected]")
 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

 

 

标签:功能,shell,192.168,echo,flag,dir,date,root,邮件
From: https://www.cnblogs.com/stuka/p/18056474

相关文章

  • BeanShell 断言如何使用?
    一引入: 二BeanShell断言参数:作用类似于JMeter断言,ctx、vars、props、prev、log、SampleResult都和BeanShellSampler一样BeanShellAssertion特定的参数有:*Failure*FailureMessage*Response*RequestHeaders*SampleLabel*SamplerData**Failure:设置......
  • shell邮件功能-2
    场景:应用服务域名对应多台负载机,当某台出现CPU或RAM资源阻塞时,如果服务器并未死机,根据负载策略(类似ping或telnet),服务器可能仍然是可用的,新的访问仍然有分配到这台机器处理的可能,但实际又不可用,体验不好,且不能及时发送故障通知。新的负载策略是访问指定页面(类似curl命令),检查返回结......
  • 借助 Terraform 功能协调部署 CI/CD 流水线-Part 1
    在当今快节奏的开发环境中,实现无缝、稳健的CI/CD流水线对于交付高质量软件至关重要。在本文中,我们将向您介绍使用BitbucketPipeline、ArgoCDGitOps和AWSEKS设置部署的步骤,所有步骤都将利用Terraform的强大功能进行编排。在Part1里,将主要介绍通过Terraform创建和部署......
  • 面试-linux shell的了解
    面试的时候,有时候会问到你对shell的了解,要你说出你知道的一些SHELL命令。 安装:yuminstallxxxyumremovexxxwget xxx 压缩,解压缩tar-zxvf xxx tar-zcvf xxxzip xxx unzipxxx 系统相关:chmod 权限设置chownuseradd添加用户ls 列出列表du......
  • linux shell 脚本中 避免文件已存在多次追加的情况
     001、为了避免脚本多次执行,生成结果多次追加,可以在追加语句的前面增加清空语句避免多次追加[root@pc1test1]#lsa.sh[root@pc1test1]#cata.sh##测试脚本#!/bin/bash>result.txt##或者使用rm-fresult.txt##在追加语句的前边增加清空语句se......
  • 易基因:妊娠期母体甲基供体摄入对IUGR猪模型回肠DNA甲基化和功能影响|项目文章
    出生体重较低的宫内生长受限(Intrauterinegrowthrestriction,IUGR)影响肠道的生长、形态和功能,导致生长性能不佳和高死亡率。最近研究表明,IUGR导致肠道中不同的DNA甲基化,可能在IUGR肠道损伤中起关键作用。母体营养可以通过表观遗传修饰(例如DNA甲基化和组蛋白乙酰化)导致后代的永久表......
  • (21)Lazarus之FilterComboBox1过滤ShellListView1的文件名
    FilterComboBox1只过滤当前目录下的文件名,不过滤目录名,也不过滤子目录名拖一个FilterComboBox1,ShellListView1到界面上1]将FilterComboBox1的ShellListView设置为ShellListView12]添加过滤文件类型 3]还须设置ShellListView1的根目录Root ......
  • ems-jsp 职工列表功能
    1.思路简单的一个数据库查询所有,将数据放入list列表,通过spring提供的model传入到前端页面。2.代码controller:/**员工列表**/@RequestMapping("list")publicStringlistEmployee(HttpServletRequestrequest,Modelmodel){List<Employ......
  • ems-jsp 添加职工功能
    1.思路接受前端的表单,将数据存入数据库。2.代码:controller:/**添加员工信息**/@RequestMapping("add")publicStringaddEmployee(Employeeemployee){log.debug("员工名称:{}",employee.getName());log.debug("员工工资:{}",......
  • 体验el-select的远程搜索功能
    需求描述没有什么技术难度,需求如下,要求上来默认加载几个选项,然后根据用户的输入,实时更新选项,且支持用户新增。(请看gif)解决方案首先要找到了el-select组件,然后里面有一个远程搜索功能。官方文档:https://element-plus.org/zh-CN/component/select.html代码如下:<el-select......