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 ...
随机推荐
- js遍历json对象
原生js遍历json对象 遍历json对象: 无规律: <script> var json = [ {dd:'SB',AA:'东东',re1:123}, {cccc:'dd',lk:'1q ...
- jQuery生成一个DIV容器,ID是"rating".
我们需要一些服务器端代码,这个例子中用到了一个PHP文件,读取rating参数然后返回rating总数和平均数.看一下rate.php代码.虽然这些例子也可以不使用AJAX来实现,但显示我们不会那么做 ...
- 【转】.NET 应用程序是怎么运行的
原文:http://www.cnblogs.com/xishuai/p/mono-dotnetcore.html .NET应用程序运行过程 C#程序运行过程 CLR结构
- hihocoder 1320 - 压缩字符串 - [hiho一下160周]
这道题目可以说是一道非常好非常一颗赛艇的DP题了. 需要注意的是,其中情形3),字符串必然能完全转化为 N(str)形式,如果有N(str1)M(str2)等等另外样式,应该首先使用拼接形式对其进行划 ...
- uoj#228. 基础数据结构练习题(线段树区间开方)
题目链接:http://uoj.ac/problem/228 代码:(先开个坑在这个地方) #include<bits/stdc++.h> using namespace std; ; l ...
- DDOS hulk,rudy
HULK (HTTP Unbearable Load King) HULK HULK是另一个DOS攻击工具,这个工具使用UserAgent的伪造,来避免攻击检测,可以通过启动500线程对目标发起高频率 ...
- js_常见特效——点击切换_背景颜色_收起与展开
<script src="../js/jquery-1.8.3.min.js"></script><script type="text/ja ...
- 怎么设置输入的EditText字母自己主动大写
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/t80t90s/article/details/25048917 复于: 2013-09-06 09: ...
- win8 metro 自己写摄像头拍照项目
这个项目不是用的系统自带的CameraCaptureUI.是自己写的摄像头的调用,界面做的不好所以,不放了.可是能够实现拍照功能: 以下是using 程序命名空间: using Windows.Med ...
- 3.cassandra遇到内存占用过高的问题
目前cssandra的内存分配如下: https://docs.datastax.com/en/cassandra/2.1/cassandra/operations/ops_tune_jvm_c.ht ...