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. oracle fm格式化

    select to_char(0.56,'FM999,999,990.00' ) from dual 其中 9代表如果存在数字则显示数字,不存在显示空格 其中 0代表如果存在数字则显示数字,不存在则显 ...

  2. python标准库和第三方库的区别

    1.python的标准库是随着pyhon安装的时候默认自带的库. 2.python的第三方库,需要下载后安装到python的安装目录下,不同的第三方库安装及使用方法不同. 3.它们调用方式是一样的,都 ...

  3. poj3728The merchant 【倍增】【LCA】

    There are N cities in a country, and there is one and only one simple path between each pair of citi ...

  4. MapReduce分组

     分组:相同key的value进行分组  例子:如下输入输出,右边的第一列没有重复值,第二列取得是当第一列相同时第二例取最大值 分析:首先确定<k3,v3>,k3的选择两种方式, 方法1. ...

  5. HDU 3045 - Picnic Cows - [斜率DP]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3045 It’s summer vocation now. After tedious milking, ...

  6. NLP常用语料集合

    常用语料资源 下面提供一些网上能下载到的中文的好语料,供研究人员学习使用.(1).中科院自动化所的中英文新闻语料库 http://www.datatang.com/data/13484中文新闻分类语料 ...

  7. little_rockie

    https://www.cnblogs.com/nxld/p/6058591.html

  8. 学习计划 nginx 中 php的配置详解

    本章只看一个刚下载的nginx是如何支持php的 -- location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_inde ...

  9. Dubbo简单环境搭建

    Dubbo服务的发展和作用: 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后的常规方案演进历程. 其次,当服务越来越多之后,我们需要做哪些服务治理? 最后,是d ...

  10. web 开发常见问题--GET POST 区别

    首先,get和post是什么? --两种 HTTP 请求方法:GET 和 POST HTTP Request Methods GET.POST 专业名称是 HTTP Request Methods.但 ...