一、shell编写邮件报警脚本

    1、POSTFIX邮件服务器准备

        a、首先卸载服务器上自带的sendmail

            rpm -qa sendmail*    //查看安装的sendmail

            rpm -e sendmail-8.*****    //卸载

        b、安装postfix(发邮件用的,25号端口)和dovecot(收邮件用的,110号端口)

            yum install postfix* dovecot* -y

            rpm -qa | grep postfix*

            rpm -qa | grep devecot*

        c、配置发邮件postfix

            vim /etc/postfix/main.cf

            1)修改myhostname

               #myhostname = virtual.domain.tld

               myhostname = mail.g.cn

            2)修改mydomain

               #mydomain=domain.tld

               mydomain=g.cn

            3)修改myorigin

               myorigin=$myhostname

               myorigin=$mydomain

            4)修改smtp监听端口

               inet_interfaces=all

               #inet_interfaces=$myhostname

               #inet_interfaces=$myhostname,localhost

               #inet_interfaces=localhost

            5)修改mydestination

               mydestination=$myhostname,$mydomain

               #mydestination=$myhostname,localhost.$mydomain,localhost,$mydomain

               #mydestination=$myhostname,localhost.$mydomain,localhost,$mydomain,mail.$mydomain,www.$mydomain,ftp.$mydomain

            6)修改本地网段

               mynetworks=192.168.31.60/24,127.0.0.0/8

               #mynetworks=$config_directory/mynetworks

               #mynetworks=hash:/etc/postfix/network_table

            7)修改relay_domain转发邮件域名

               relay_domain=$mydestination

            8)修改postfix aliasex邮件别名

               #alias_maps=dbm:/etc/aliases

               alias_maps=hash:/etc/aliases

               #alias_maps=netinfo:/aliases

               #alias_database=dbm:/etc/aliases

               #alias_database=dbm:/etc/maik/aliases

               alias_database=hash:/etc/aliases

               #alias_database=hash:/etc/aliases, hash:/opt/majordomo/aliases

              :wq

            9)启动postfix打开25号端口

               service postfix restart

               netstat -anp |grep :25

               pstree |grep master        //启动后进程叫master

            10)测试是否能发送邮件

               echo  hello | mail root@g.cn

               报错:-bash: mail: command not found

               安装:yum install -y mailx

               查看邮件:mail

               删除邮件:d

               退出:q

               telnet发送邮件

                  telnet 192.168.31.60  25

                  mail form:发件人

                  rcpt to:收件人

                  data

                  邮件内容

                  quit

        e、配置收邮件dovecot

            vim /etc/dovecot/dovecot.conf

            1)修改protocole支持pop3和pop3s

              protocols=imap imaps pop3 pop3s

            2)修改pop3和imaps在所在ipv4接口上监听110与143端口

              imap_listen = *

              pop3_listen = *

            n)开启dovecot

              service dovecot start

              netstat -tunpl |grep :110

              netstat -tunpl |grep :143

    2、编写web服务器监控

        nc命令:

            Linux中nc命令是一个功能强大的网络工具,全称是netcat。

            语法:

                nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]

            参数说明:

                -g<网关> 设置路由器跃程通信网关,最丢哦可设置8个。

                -G<指向器数目> 设置来源路由指向器,其数值为4的倍数。

                -h 在线帮助。

                -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。

                -l 使用监听模式,管控传入的资料。

                -n 直接使用IP地址,而不通过域名服务器。

                -o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。

                -p<通信端口> 设置本地主机使用的通信端口。

                -r 乱数指定本地与远端主机的通信端口。

                -s<来源位址> 设置本地主机送出数据包的IP地址。

                -u 使用UDP传输协议。

                -v 显示指令执行过程。

                -w<超时秒数> 设置等待连线的时间。

                -z 使用0输入/输出模式,只在扫描通信端口时使用。

        touch web.sh

            #!/bin/bash

            #web.sh

            nc -w 3 localhost 80 &>/dev/null

            if [ $? -eq 0 ];then

              str="apache web服务器目前状态处于正常状态!!!"

            else

              str="apache web服务器目前处于关闭或无响应状态!!!"

            fi

            echo $str|mail -s 'apache web server' admin@g.cn

    3、编写mysql数据库监控

        touch mysql.sh

            #!/bin/bash

            #mysql.sh

            nc -e 3 localhost 3306 &>/dev/null

            if [ $? -eq 0 ];then

                    str="mysql server status Running!!!"

            else

                    str="mysql server status Shuting!!!"

            fi

            echo $str | mail -s 'mysql server' admin@g.cn

    4、编写Disk硬盘空间监控

        touch disk.sh

            #!/bin/bash

            #disk.sh

            ds=`df |awk '{if(NR==7){print int($5)}}'`    //视情况而定

            if [ $ds -lt 45 ];then

                   str="disk space is less than 45%!!!"

            else

                   str="disk space is greater than 45%!!!"

            fi

            echo $str | mail -s 'linux server disk space' admin@g.cn

    5、编写mem(内存)空间监控脚本

        touch mem.sh

            #!/bin/bash

            #mem.sh

            mem=`free -m |awk '{if(NR==2){printf("%.0f\n",(int($3)/int($2))*100)}}'`        //四舍五入取整

            if [ $mem -lt 45 ];then            //表达式内为整数表达式,不能用浮点型

                   str="mem space is less than 45%,Achieve $mem%!!!"

            else

                   str="mem space is greater than 45%,Achieve $mem%!!!"   

            fi

            echo $str | mail -s 'linux server mem space' admin@g.cn

    6、报警脚本重启生效

          1)设置脚本权限

            chmod 755 /etc/init.d/mon.sh    //mon.sh:将所有脚本放到这个脚本中,或者调用其他脚本,发送一封邮件即可

          2)crontab -e                //任务计划

            */5****bash /etc/init.d/mon.sh

            如:10 13 *** /mnt/monitor.dh      //每天的13:10执行这个代码

          3)tail -f /var/log/cron

          4)邮件报警要提前测试准备邮件系统是否正常工作

  


shell脚本编程学习笔记(三)编写邮件报警脚本的更多相关文章

  1. 【Linux_Shell 脚本编程学习笔记三、分支与循环结构】

    if 语句是实际生产工作中最重要且最常用的语句,所以,必须掌握牢固 if 条件语法 1. 单分支机构 if  [ 条件 ] then 指令 fi 或 if  [  条件 ]; then 指令 fi   ...

  2. Bash脚本编程学习笔记08:函数

    官方资料:Shell Functions (Bash Reference Manual) 简介 正如我们在<Bash脚本编程学习笔记06:条件结构体>中最后所说的,我们应该把一些可能反复执 ...

  3. Bash脚本编程学习笔记07:循环结构体

    本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...

  4. Bash脚本编程学习笔记06:条件结构体

    简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式. if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现, ...

  5. Bash脚本编程学习笔记04:测试命令test、状态返回值、位置参数和特殊变量

    我自己接触Linux主要是大学学习的Turbolinux --> 根据<鸟哥的Linux私房菜:基础篇>(第三版) --> 马哥的就业班课程.给我的感觉是这些课程对于bash的 ...

  6. Shell高级编程学习笔记(基础篇)

    目录 1.shell脚本的执行方法  2.shell的变量类型  3.shell特殊变量 4.变量子串的常用操作  5.批量修改文件名实践   6.变量替换 7.在shell中计算字符串长度的方法  ...

  7. 【Linux_Shell 脚本编程学习笔记四、监控系统内存并报警企业案例脚本】

    前置知识:awk 参考学习博客:https://www.cnblogs.com/bugingcode/p/8287914.html awk 'BEGIN{ commands } pattern{ co ...

  8. bash脚本编程学习笔记(二)

    1.脚本编程之函数 函数是实现结构化编程重要的思想,主要目的是实现代码重用 定义一个函数: function FUNCNAME { command //函数体 }   FUNCNAME(){ //函数 ...

  9. bash脚本编程学习笔记(一)

    bash脚本语言,不同于C/C++是一种解释性语言.即在执行前不需要事先转变为可执行的二进制代码,而是每次执行时经解释器解释后执行.bash脚本语言是命令的堆砌,即按照实际需要,结合命令流程机制实现的 ...

随机推荐

  1. SVN提交时没有写注释

    会报错: Error: Commit blocked by pre-commit hook (exit code 1) with output: Error: [Commit failed]: Emp ...

  2. ps怎么把一种颜色变成另一种颜色

    使用软件:PS CC版 使用Photoshop 将图片中的一种颜色变成另一种颜色的两种方法: 1.打开图片,Ctrl+J复制一份: 2.执行菜单-选择-色彩范围,使用吸管和吸管+选取图片颜色部分,点确 ...

  3. Mybatis学习笔记——输入参数parameterType、Mybatis调用存储过程

    输入参数:parameterType(两种取值符号) 1.类型为简单类型 区别:     (1) #{可以为任意值}         ${vaue}--->标识符只能是value     (2) ...

  4. C++-HDU2196-Computer-[树的直径]

    直径定义:树上的最长路径,不妨设端点分别为s,t 可以证明(感觉):每个点到其最远点必定为s or t,反之亦然 首先,第一次dfs找到s 然后,第二次dfs以s为根找到t 最后,第三次dfs以t为根 ...

  5. 【StarUML】 活动图

    StarUML中的活动图本质上是流程图,活动图相对来说,更加专业,它有对信号的处理,对状态动作.数据区别表示,使得更清晰地了解控制流的走向. 1.基本元素 a.活动状态图(Activity).动作状态 ...

  6. winform学习(7)Label控件、Button控件、TextBox控件

    Label控件是System.Windows.Forms.Label 类提供的控件. 作用:主要用来提供其他控件的描述文字,例如:登录窗体上的用户名.密码(输入框前面的字) Button控件是Syst ...

  7. (转)java内存分配分析/栈内存、堆内存

    转自(http://blog.csdn.net/qh_java/article/details/9084091) java内存分配分析/栈内存.堆内存 java内存分配分析 本文将由浅入深详细介绍Ja ...

  8. Django项目报错: 禁止访问(403),CSRF验证失败,相应中断

    如果想要取消表单的CSRF防护,可以在模板上删除{% csrf_token %}, 并且在相应的视图函数中添加装饰器@csrf_exempt, 代码如下: from django.views.deco ...

  9. html中的路径详解

    路径指文件存放的位置,在网页中利用路径可以引用文件,插入图像.视频等.表示路径的方法有两种:相对路径,绝对路径.以下讨论均是在HTML环境下进行. 相对路径 相对路径是指目标相对于当前文件的路径,网页 ...

  10. javascript当中局部变量和全局变量

    2)局部变量和全局变量 马克-to-win:浏览器里面 window 就是 global,通常可以省.nodejs 里没有 window,但是有个叫 global 的.例 3.2.1<html& ...