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网络畅通情况,实战用例的更多相关文章

  1. shell脚本之颜色效果显示以及PS1颜色实战

    在bash shell脚本中我们可以使用ASCII颜色来显示文本信息. 格式:\033\[31m hello \033[0m ##m: 左侧#:这个#可以是3或者4,作用不一样. 3:前景色 4:背景 ...

  2. Linux Shell脚本之自动修改IP

    作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名 ...

  3. 制作service服务,shell脚本小例子(来自网络)

    事先准备工作:源码安装apache .安装目录为/usr/local/httpd 任务需求:1.可通过 service httpd start|stop|status|restart 命令对服务进行控 ...

  4. Shell脚本实现自动修改IP地址

    作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名 ...

  5. 使用shell脚本实现ping对应IP所对应的人名

    #!/bin/bash a=(张三 李四 王五 赵六) ..} do . $((${i}+)) >dev/>&;then ))"号"${a[${i}]}&quo ...

  6. shell脚本批量ping测试IP是否通

    #!/bin/bash rm -f result.txt cat ip.txt | fping > result.txt 2行代码就搞定,很方便,初学shell,很强大,问了下同事,但是shel ...

  7. 【shell脚本】检测当前用户是否为超级管理员===checkRoot.sh

    检测当前用户是否为超级管理员,是则使用yum安装vsftpd,不是则输出提示信息 脚本赋予执行权限 [root@VM_0_10_centos shellScript]# chmod a+x check ...

  8. shell脚本监控阿里云专线网络状态,若不通通过触发阿里云的进程监控报警

    #!/bin/bash while [ 1 ] do rtt=`ping -c 3 15.0.160.18 |grep rtt |awk '{print $4}' |awk -F'/' '{print ...

  9. shell脚本查找tcp过多ip地址封掉

    #!/bin/bash #hc source /etc/profile iplist=`netstat -ntu | awk '{print $5}'| cut -d':' -f1| sort |un ...

随机推荐

  1. 170815、redis3.0安装配置

    下载地址http://redis.io/download 安装步骤: 1 首先需要安装gcc,把下载好的redis-3.0.0-rc2.tar.gz 放到linux /usr/local文件夹下 2 ...

  2. 关于matlab小记

    目录: 1.函数取整 2.数据显示格式 3.三角函数运算 4.矩阵运算 5.函数句柄 6.二维函数图像绘制 7.符号对象 8.关于微积分 9.关于逻辑语句 10.关于运算符 ───────────── ...

  3. JDBC及Filter

    JNDI容器:Java Naming Directory Interface,java命名目录接口EJB:javaEE服务器端组件模型,Enterprise JavaBean,设计目标与核心应用是建立 ...

  4. 卿学姐与公主 UESTC - 1324 分块模板题

    题意:http://acm.uestc.edu.cn/#/problem/show/1324 中文题,自己看喽. 题解:分块模板,update时顺便更新块属性.ask时先判掉belong[l]==be ...

  5. Linux下搭建hadoop开发环境-超详细

    先决条件:开发机器需要联网 已安装java 已安装Desktop组 1.上传安装软件到linux上: 2.安装maven,用于管理项目依赖包:以hadoop用户安装apache-maven-3.0.5 ...

  6. 算法提炼是落脚点-php数组-字符串函数

    int array_unshift    ( array &$array   , mixed $value1   [, mixed $...  ] ) array_unshift() prep ...

  7. B-tree indexes

    High Performance MySQL, Third Edition by Baron Schwartz, Peter Zaitsev, and Vadim Tkachenko http://d ...

  8. 网站优化不等于搜索引擎优化SEO

    对于SEO相信搞网络营销的人基本上都知道这个名词,英文全称为search engine optimization,中文一般叫搜索引擎优化,也有的叫搜索引擎定位(Search Engine Positi ...

  9. Monkey and Banana---hdu1069(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意就是给你n种长方体每种类型不限制个数,然后我们把它们一个个堆起来,并且要满足下面的要比上面的 ...

  10. Python开发【笔记】:加锁的最佳方案

    避开死锁 代码程序中,尽量要避免死锁的产生,下面分析常见的线程锁使用方式 :注:只有同一把锁才会产生互斥 1.常见的死锁方式(加锁时程序报错,锁未释放): import time import thr ...