Shell脚本实现检测某ip网络畅通情况,实战用例
Shell脚本实现检测某ip网络畅通情况,实战用例
环境准备,linux shell 发送email 邮件:
1.安装sendmail
yum -y install sendmail
安装好sendmail以后执行以下命令启动sendmail
/etc/init.d/sendmail start
Starting sendmail: [ OK ]
Starting sm-client: [ OK ]
启动以后我们可以执行mail命令测试一下是否能发送邮件
一、通过文件内容发送邮件
mail -s 'Test mail' xxx@xxx.com < /etc/passwd
2.使用管道符发送邮件内容,安装mailx
yum install mailx -y
3.安装mutt
yum install mutt
echo -e "服务器异常,请检查" | mutt -s "xxx告警" xxx@xxx.com
邮件一般会被当成垃圾邮件,需要到垃圾箱里面查看,设置为不是垃圾邮件,或者添加白名单(由于不是正常邮箱格式,QQ邮箱添加不了白名单)
------------------------------
sendmail: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
Error sending message, child exited 127 (Exec error.).
Could not send the message.
============================================
#!/bin/bash
####################################################################################
#本脚本放于异机,使用定时任务检测192.168.1.12是否网络畅通,如果不通则发邮件告警
#为防止频繁收到邮件,对发送邮件做了如下限制:
#一小时内只发前三条告警邮件,也就是如果网络一直不通,则每小时内只发前三条邮件。
#本脚本只能检测一个ip是否网络断开,可在开始部分加个循环,检测多个ip
####################################################################################
#初始化环境变量
source /root/.bash_profile
#邮件发送列表
mail_list='135xxxxxxxx@xx.com,xxx@xxx.com'
#ping三次检测的ip
ping=`ping -c 192.168.1.12|awk 'NR==7 {print $4}'`
#如果三次均没ping通,则做以下操作,ping不通可能返回为空,单个[]会报错-eq: unary operator expected,要用双重的 [ ]
if [[ $ping -eq ]]
then
#检查mailinfo文件是否存在,不存在则建立
if [ ! -e ./mailinfo ]
then
touch ./mailinfo
fi
#获取当前主机时间,用于邮件正文的时间显示
now_time=`date`
#检查./mailinfo的行数是否为空,如果为空则直接发送邮件
row_num=`wc -l ./mailinfo | cut -c `
if [ $row_num -eq ]
then
echo "发邮件"
echo -e "1.12网络已断开,请检查 \n\n 告警时间:$now_time" | mutt -s "1.12告警" $mail_list
#更新最后一次发送时间
date +%Y%m%d-%H%M > ./mailinfo
echo >> ./mailinfo
#如果mailinfo内容不为空,则判断(当前时间减1小时)是否大于上次发送时间,如果是则发邮件
else
#获取上次发邮件的日期和时间
last_date=`head - ./mailinfo | cut -c -`
last_time=`head - ./mailinfo | cut -c -`
#获取1小时前的日期和时间
current_date=`date +%Y%m%d`
current_time=`date +%H%M`
#计算当前时间和上次时间差距多久,加10#是为了防止0开头的字符被当成8进制计算
let time_diff=#$current_time-#$last_time
#获取发送次数
send_times=`tail - ./mailinfo`
#以下四种情况发邮件:
#当前日期>上次日期,可以发,然后发送计数send_times置为1
if [ "$current_date" -gt "$last_date" ]
then
echo "发邮件"
echo -e "1.12网络已断开,请检查 \n\n 告警时间:$now_time" | mutt -s "1.12告警" $mail_list
#更新最后一次发送时间
date +%Y%m%d-%H%M > ./mailinfo
echo >> ./mailinfo
fi
#当前日期等于上次日期 and 本次时间大于上次时间1小时外,可以发,然后发送计数send_times置为1
if [ "$current_date" -eq "$last_date" -a $time_diff -ge ]
then
echo "发邮件"
echo -e "1.12网络已断开,请检查 \n\n 告警时间:$now_time" | mutt -s "1.12告警" $mail_list
#更新最后一次发送时间
date +%Y%m%d-%H%M > ./mailinfo
echo >> ./mailinfo
fi
#当前日期等于上次日期 and 发送计数send_times置为1,可以发,然后发送次数加1
if [ "$current_date" -eq "$last_date" -a $send_times -eq ]
then
echo "发邮件"
echo -e "1.12网络已断开,请检查 \n\n 告警时间:$now_time" | mutt -s "1.12告警" $mail_list
#更新最后一次发送时间
date +%Y%m%d-%H%M > ./mailinfo
echo >> ./mailinfo
fi
#当前日期等于上次日期 and 发送计数send_times置为2,可以发,然后发送次数加1
if [ "$current_date" -eq "$last_date" -a $send_times -eq ]
then
echo "发邮件"
echo -e "1.12网络已断开,请检查 \n\n 告警时间:$now_time" | mutt -s "1.12告警" $mail_list
#更新最后一次发送时间
date +%Y%m%d-%H%M > ./mailinfo
echo >> ./mailinfo
fi
fi
fi
===============================
cd /home
mkdir shell
cd /home/shell/
复制上面内容到服务器上创建文件粘帖(window下保存的文件有编码问题)
vim checkserver.sh
从服务器编辑后sz下载的修改后可以直接上传,复制粘帖反而会成为一行,没有换行了。
-------------------------
增加执行权限
chmod +x checkserver.sh
-------------------------
测试脚本执行情况,可以先在文件头部加个echo信息,或者把IP改成ping不通的
./checkserver.sh
-------------------------
用crontab每5分钟执行一次
crontab -e
*/5 * * * * /home/shell/checkserver.sh
"/tmp/crontab.QIbyUa" 1L, 39C written
crontab: installing new crontab
Shell脚本实现检测某ip网络畅通情况,实战用例的更多相关文章
- shell脚本之颜色效果显示以及PS1颜色实战
在bash shell脚本中我们可以使用ASCII颜色来显示文本信息. 格式:\033\[31m hello \033[0m ##m: 左侧#:这个#可以是3或者4,作用不一样. 3:前景色 4:背景 ...
- Linux Shell脚本之自动修改IP
作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名 ...
- 制作service服务,shell脚本小例子(来自网络)
事先准备工作:源码安装apache .安装目录为/usr/local/httpd 任务需求:1.可通过 service httpd start|stop|status|restart 命令对服务进行控 ...
- Shell脚本实现自动修改IP地址
作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名 ...
- 使用shell脚本实现ping对应IP所对应的人名
#!/bin/bash a=(张三 李四 王五 赵六) ..} do . $((${i}+)) >dev/>&;then ))"号"${a[${i}]}&quo ...
- shell脚本批量ping测试IP是否通
#!/bin/bash rm -f result.txt cat ip.txt | fping > result.txt 2行代码就搞定,很方便,初学shell,很强大,问了下同事,但是shel ...
- 【shell脚本】检测当前用户是否为超级管理员===checkRoot.sh
检测当前用户是否为超级管理员,是则使用yum安装vsftpd,不是则输出提示信息 脚本赋予执行权限 [root@VM_0_10_centos shellScript]# chmod a+x check ...
- shell脚本监控阿里云专线网络状态,若不通通过触发阿里云的进程监控报警
#!/bin/bash while [ 1 ] do rtt=`ping -c 3 15.0.160.18 |grep rtt |awk '{print $4}' |awk -F'/' '{print ...
- shell脚本查找tcp过多ip地址封掉
#!/bin/bash #hc source /etc/profile iplist=`netstat -ntu | awk '{print $5}'| cut -d':' -f1| sort |un ...
随机推荐
- intellij idea移动至方法块function()末尾的快捷键
intellij idea移动至方法块末尾的快捷键: 1. move caret to code block end ctrl+] 2. move caret to code block end wi ...
- iOS - Block的简单使用
Block 的使用有两种: .独立Block .内联Block <一>独立Block 使用方式 一.定义一个Block Object,并调用. 1.定义 // 定义一个Bl ...
- vim ctrl+v垂直选取产生 e353错误
原因是/etc/vim/vimrc中map ctrl+v为其他作用了 解决方法: 删除掉map<C-V>...项即可
- MPU6050滤波、姿态融合(一阶互补、卡尔曼)
前几天做了6050原始数据的串口输出和上位机波形的查看.这篇博客我们来看一下对原始数据的处理. 任务:利用STC89C52RC对MPU6050原始数据进行滤波与姿态融合. 首先我摘抄了一段别人在昨晚这 ...
- 防EasyUI中登录按钮
之前系统中是用easyui做的,可能在提示"请输入密码"这几个字时,就变成了点了,让我很... 于时还是找了很多,总算还是让我找到了,不会表达就来源码吧 <style typ ...
- 【紫书】Quadtrees UVA - 297 四叉树涂色
题意:前序遍历给出两个像素方块.求两个方块叠加后有几个黑色格子. 题解:每次读进来一个方块,就在二维数组上涂色.每次把白色涂黑就cnt++: 具体递归方法是以右上角坐标与边长为参数,每次通过几何规律往 ...
- 特征向量-Eigenvalues_and_eigenvectors#Graphs 线性变换
总结: 1.线性变换运算封闭,加法和乘法 2.特征向量经过线性变换后方向不变 https://en.wikipedia.org/wiki/Linear_map Examples of linear t ...
- IOS--jenkins ,app,reengine
传统的对iOS逆向的工具要使用到下面很多: clutchotoolkeychain-dumpersqlitedumpdecryptedclass-dump-zTheos http://iosapp.m ...
- TP5.0 controller下分版本 分块 分目录写法访问
这个写法是在api模块下的controller目录下又分出了v1和以后未知的v(x)版本,这个时候需要配置路由来访问这个接口类似于这种形式: http://www.xx.com/index.php/a ...
- LightOJ 1027 - A Dangerous Maze(求期望)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1027 题意:又一个迷宫,有n个门,每个门又一个值num,如果num>0 说明在n ...