一、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. python:if else 语句

    #!/usr/bin/python# -*- coding:utf-8 -*- import os fileName1 = 'a.txt'if os.path.exists(fileName1): f ...

  2. 油候插件grant的使用

    // ==UserScript== // @name Test Baidu // @namespace http://www.baidu.com/ // @version 0.1 // @descri ...

  3. [HNOI2013] 游走 - 概率期望,高斯消元,贪心

    假如我们知道了每条边经过的期望次数,则变成了一个显然的贪心.现在考虑如何求期望次数. 由于走到每个点后各向等概率,很显然一条边的期望次数可以与它的两个端点的期望次数,转化为求点的期望次数 考虑每个点对 ...

  4. FPGA设计的注意事项

    设计文档 一个完整的软件是由程序. 数据和文档三部分组成的. 在FPGA电路设计中, 撰写完善的设计文档是非常重要的. 对于一个比较复杂的设计来说, 各个子单元的功能各不相同, 实现的方法也不一样,各 ...

  5. django入门与实践(续)

    完善博客 博客页面设计 页面概要 1.博客主页面 主页面内容 文章标题列表,超链接 发表博客按钮(超链接) 列表编写思路 取出数据库中所有文章对象 将文章对象们打包成列表,传递到前端 前端页面把文章以 ...

  6. 第三十五篇 入门机器学习——Juptyer Notebook中的常用快捷键

        1.运行当前Cell:Ctrl + Enter   2.运行当前Cell并在其下方插入一个新的Cell:Alt + Enter   3.运行当前Cell并选中其下方的Cell:Shift + ...

  7. css实现移动端滚动条隐藏仍然可以滚动内容

    .g-panel { height: calc(100% - 112px); overflow: auto; &::-webkit-scrollbar { display: none; // ...

  8. codeforces Codeforces Round #597 (Div. 2) B. Restricted RPS 暴力模拟

    #include <bits/stdc++.h> using namespace std; typedef long long ll; ]; ]; int main() { int t; ...

  9. ajax post

    前端 $.post("url",JSON.stringify({ a:a, ... }), function(data){ }, 'json'); 后端 @PostMapping( ...

  10. data-dismiss="modal"

    提交按钮不加: 加上则不会出现提示,直接关闭弹出框 <div class="modal fade" id="myModal" tabindex=" ...