业务场景:应用发布监听服务是否正常启动,因为服务器资源不够上不了prometheus、grafana,所以写的shell脚本监听。此脚本适用于初创公司及小微企业使用。

准备工作

除了shell脚本这里还使用到了expect脚本,expect类似有telnet你的服务端口返回相应的值判断应用端口是否正常开启。

yum install -y expect
vim script.exp #!/usr/bin/expect
set timeout 2
set host [lindex $argv 0]
set port [lindex $argv 1]
spawn telnet $host $port
expect "*Escape character*"
send "\1D\r quit\r"

然后是主体脚本main.sh

#!/bin/bash
ip=$1 #从参数中获取目的IP
port=$2 #从参数中获取目的端口
AppName=$3 #从参数中获取服务名称
Fail=0 #失败标记
FailCount=0 #连续失败次数
Dmail=xxxxxxxxxx@qq.com #通知邮箱 while true
do
date=`date`
expect -f script.exp $ip $port | grep "Escape character" > $ip-$port.log
#截取script.exp脚本中返回的包含Escape character的行,重定向到日志文件中,如果telnet失败,则文件为空。注意第一次启动该脚本会自动创建日志文件,邮件也会异常提醒,重新运行后会就正常。
if [[ -s $ip-$port.log ]]
then
#若文件存在且不为空,则端口连通
if [[ $Fail -eq 1 ]]
#若端口连通且上一次为失败状态,则执行
then
echo -e "$ip $port $AppName 已恢复正常\n$date" >> success.txt | mailx -s "【xxxx环境】$AppName已恢复正常!" $Dmail < success.txt
#发送邮件到XXXX@qq.com
Fail=0
#重置失败标记
FailCount=0
#重置失败次数
cat /dev/null > success.txt
#邮件发送后清空日志文件,防止日志堆积发送。
fi
else
FailCount=$(( $FailCount+1 ))
#记录连续失败次数
if [[ $Fail -eq 0 ]]
then
#若端口不通且上一次为连通状态,则执行
echo -e "$ip $port $AppName 监听端口异常\n$date" >> fail.txt | mailx -s "【XXXX环境】$AppName异常请查看检查服务!!!" $Dmail < fail.txt
Fail=1
#点亮失败标记
cat /dev/null > fail.txt
fi if [[ $FailCount -eq 180 ]]
then
#若连续失败次数大于180次,重置失败标记及最大连续失败次数,若仍失败则再次发送邮件提醒。
FailCount=0
Fail=0
fi
fi
sleep 2
done

邮箱通知设置

#邮箱配置教程:https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
yum -y install mailx
vim /etc/mail.rc set from=xxxxxxxxx@qq.com
# 这里必须和set smtp-auth-user的邮箱一样
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=xxxxxxxxx@qq.com
set smtp-auth-password=邮箱授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/root/.certs

邮箱证书配置,避免不必要的异常。

mkdir -p /root/.certs/

echo -n | openssl s_client -connect smtp.qq.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 /root/.certs


cd /root/.certs
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt


#返回如下提示即可:
Notice: Trust flag u is set automatically if the private key is
present.

测试

#测试
mailx -s “邮箱测试” xxxx@qq.com < "hello world"

最后批量监控服务shell

#创建日志文件
touch fail.txt
touch success.txt vim start.sh

#!/bin/bash
#目的ip 端口 服务名称
./main.sh ip prot XXXX &
./main.sh ip prot XXXX &
./main.sh ip prot XXXX &
./main.sh ip prot XXXX &

转载请备注原文链接!

shell端口监听异常邮箱告警的更多相关文章

  1. netty同端口监听tcp和websocket协议

    前言: 软件通信七层结构(osi模型)中由协议套协议最终组成最高级应用层协议(http等等),下三层结构偏向与数据通信,上三层更偏向于数据处理,中间的传输层则是连接上三层与下三层之间的桥梁,每一层都做 ...

  2. ZooKeeper(二):多个端口监听的建立逻辑解析

    ZooKeeper 作为优秀的分布系统协调组件,值得一探究竟.它的启动类主要为: 1. 单机版的zk 使用 ZooKeeperServerMain 2. 集群版的zk 使用 QuorumPeerMai ...

  3. nodejs 80端口监听失败及NODE_PATH不起作用的问题

    nodejs做web服务器,打开80时报错:Error: listen EACCES 0.0.0.0:80 80端口监听失败,是因为1024以下的端口需要root权限,需要sudo或su之后执行.但这 ...

  4. Oracle 监听器日志文件过大导致监听异常

    Oracle 监听器日志文件过大导致监听异常 db版本:11.2.0.1 os版本:windows2008 现象: 应用异常,无法连接数据库.登陆数据库服务器,查看监听已经断掉.尝试重启监听,重启失败 ...

  5. asp.net core 多端口监听&日志服务

    1 配置多个端口监听 HostingAbstractionsWebHostBuilderExtensions. public static IWebHostBuilder UseUrls(this I ...

  6. swoole多端口监听

    今天测试swoole写webserver实现多端口监听.记录下爬过的坑:关于tcp协议监听触发不到receive!!!!! 首先上服务端代码 class Http { /** * 服务实例 * @va ...

  7. 获取运行端口监听的用户身份auth-owner

    获取运行端口监听的用户身份auth-owner   Windows系统提供工作在TCP 113端口的授权服务(Authentication Service),用来判断TCP连接的用户.Nmap的aut ...

  8. 利用 netsh 给 mysql 开启多端口监听

    利用 netsh 给 mysql 开启多端口监听 标题党,实际并不是真的多端口监听,只是端口转发而已. 由于某种特殊原因需要 mysql 服务器多个端口监听. mysql 服务器本身是不支持的,但可以 ...

  9. 多进程端口监听 How nginx processes a request Server names

    网络编程( 六):端口那些事儿 - 知乎专栏  https://zhuanlan.zhihu.com/p/20365900 不停服务reload.restart 多进程端口监听 我们都有一个计算机网络 ...

  10. Nginx配置IPv6端口监听及务器设置IPV6及Https支持并通过AppStore审核

    一.监听端口 从Nginx 1.3的某个版本起,默认ipv6only是打开的,所以,我们只需要在监听中加入ipv6监听即可,不过推荐都手动加上比较好,代码如下: listen [::]: ipv6on ...

随机推荐

  1. 安装 LAMP 环境(yum 版本) shell脚本

    #!/bin/bash # 安装 LAMP 环境(yum 版本) # 本脚本适用于 RHEL7(RHEL6 中数据库为 mysql) yum makecache &>/dev/null ...

  2. KTV和泛型(2)

    很多使用泛型的小伙伴,都会有一个疑惑:为什么有的方法返回值前带<T>.<K, V>之类的标记,而有的方法返回值前又什么都不带呢?就像这样: // 实体基类 class Enti ...

  3. 如何实现通过Leaflet加载dwg格式的CAD图

    前言 ​ 在前面介绍了通过openlayers加载dwg格式的CAD图并与互联网地图叠加,openlayers功能很全面,但同时也很庞大,入门比较难,适合于大中型项目中.而在中小型项目中,一般用开源的 ...

  4. 一天十道Java面试题----第三天(对线程安全的理解------>线程池中阻塞队列的作用)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 21.对线程安全的理解 22.Thread和Runnable的区别 23.说说你对守护线程的理解 24.ThreadLoc ...

  5. 如何使用IDEA创建一个简单的java工程?

    文章目录 1.创建新工程 1.1 新建项目 1.2 在src目录下创建package 1.3 在包下创建类 2.编写代码.运行项目 2.1 编写代码 2.2 运行结果 3.开心的从eclipse转移到 ...

  6. 最长不下降子序列(线段树优化dp)

    最长不下降子序列 题目大意: 给定一个长度为 N 的整数序列:A\(_{1}\),A\(_{2}\),⋅⋅⋅,A\(_{N}\). 现在你有一次机会,将其中连续的 K 个数修改成任意一个相同值. 请你 ...

  7. 又拍云之 Keepalived 高可用部署

    在聊 Keepalived 之前,我们需要先简单了解一下 VRRP.VRRP(Virtual Router Redundancy Protocol)即虚拟路由冗余协议,是专门为了解决静态路由的高可用而 ...

  8. 【安装文档】TRex流量分析仪保姆级安装指南--基于VMware虚拟机(ubantu18.04@Intel 82545EM)

    前言 既然你已经知道TRex并尝试搜索它的安装教程,这意味着你有一定的基础知识(至少知道自己需要什么).因此本文对于TRex的介绍部分会偏少 本次主要为TRex安装过程的一次记录(版本为v3.0.0) ...

  9. iview table json数据里的num排序问题

    title: 'Num', key: 'num', sortable: true, sortMethod:function(a,b,type){ //可以用Number()或者parseInt(a)转 ...

  10. clickhouse在风控-风险洞察领域的探索与实践

    一.风险洞察平台介绍 以Clickhouse+Flink实时计算+智能算法为核心架构搭建的风险洞察平台, 建立了全面的.多层次的.立体的风险业务监控体系,已支撑欺诈风险.信用风险.企业风险.小微风险. ...