shell脚本编程学习笔记(三)编写邮件报警脚本
一、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脚本编程学习笔记(三)编写邮件报警脚本的更多相关文章
- 【Linux_Shell 脚本编程学习笔记三、分支与循环结构】
if 语句是实际生产工作中最重要且最常用的语句,所以,必须掌握牢固 if 条件语法 1. 单分支机构 if [ 条件 ] then 指令 fi 或 if [ 条件 ]; then 指令 fi ...
- Bash脚本编程学习笔记08:函数
官方资料:Shell Functions (Bash Reference Manual) 简介 正如我们在<Bash脚本编程学习笔记06:条件结构体>中最后所说的,我们应该把一些可能反复执 ...
- Bash脚本编程学习笔记07:循环结构体
本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...
- Bash脚本编程学习笔记06:条件结构体
简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式. if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现, ...
- Bash脚本编程学习笔记04:测试命令test、状态返回值、位置参数和特殊变量
我自己接触Linux主要是大学学习的Turbolinux --> 根据<鸟哥的Linux私房菜:基础篇>(第三版) --> 马哥的就业班课程.给我的感觉是这些课程对于bash的 ...
- Shell高级编程学习笔记(基础篇)
目录 1.shell脚本的执行方法 2.shell的变量类型 3.shell特殊变量 4.变量子串的常用操作 5.批量修改文件名实践 6.变量替换 7.在shell中计算字符串长度的方法 ...
- 【Linux_Shell 脚本编程学习笔记四、监控系统内存并报警企业案例脚本】
前置知识:awk 参考学习博客:https://www.cnblogs.com/bugingcode/p/8287914.html awk 'BEGIN{ commands } pattern{ co ...
- bash脚本编程学习笔记(二)
1.脚本编程之函数 函数是实现结构化编程重要的思想,主要目的是实现代码重用 定义一个函数: function FUNCNAME { command //函数体 } FUNCNAME(){ //函数 ...
- bash脚本编程学习笔记(一)
bash脚本语言,不同于C/C++是一种解释性语言.即在执行前不需要事先转变为可执行的二进制代码,而是每次执行时经解释器解释后执行.bash脚本语言是命令的堆砌,即按照实际需要,结合命令流程机制实现的 ...
随机推荐
- 函数的应用_python
一.各类函数应用 1.高阶函数:函数里面调用函数 例子: def add(a): return (a*a) def print_info(fun,c,d): #传入函数与参数 return fun(c ...
- manifold learning
MDS, multidimensional scaling, 线性降维方法, 目的就是使得降维之后的点两两之间的距离尽量不变(也就是和在原是空间中对应的两个点之间的距离要差不多).只是 MDS 是针对 ...
- codeforces 1284D. New Year and Conference(线段树)
链接:https://codeforces.com/problemset/problem/1284/D 题意:有n场讲座,有两个场地a和b,如果在a场地开讲座则需要占用[sai,eai],在b场地开讲 ...
- 神舟战神笔记本使用U盘重装系统
今天我的神舟战神笔记本电脑系统故障了,在这里记录一下使用U盘重装系统的方法: 1.插入装机U盘. 2.按开机键,然后马上按Esc键. 3.选择Boot Manager进入. 4.选择EFI USB D ...
- [转] UML中的六大关系
UML中的六大关系 转自:https://www.cnblogs.com/hoojo/p/uml_design.html 在UML类图中,常见的有以下几种关系: 泛化(Generalization), ...
- borderInterpolate()函数
官网:borderInterpolate borderInterpolate 函数原型 int borderInterpolate( int p, int len, int borderType ); ...
- 题解【洛谷P1841】[JSOI2007]重要的城市
题面 题解 最短路图模板题. 介绍一下最短路图: 先对原图跑一边单源最短路,求出源点到每个点\(i\)的最短路\(dis[i]\). 接下来构建新图:对于一条边\((x,y,v)\),若\(dis[x ...
- 总结下抽象类Abstract和虚方法Virtual(易混点)
1.普通类中可以有普通方法和虚方法,在被继承时,虚方法可以选择重写(override)或者不重写 2.抽象类中可以有普通方法和虚方法和抽象方法,当被继承时 如下 1.普通方法不能被子类重写 2.虚方法 ...
- Docker - 查看容器进程在宿主机的 PID
概述 查看 docker 进程, 在容器外的 pid 背景 docker 中运行的进程, 本质上是运行在 host 上的 这些进程, 在 host 上, 也可以有自己的 pid 如果某种情况下, 连不 ...
- centos7 源码编译安装nginx教程 nginx安装脚本 lua-nginx-module
安装nginx需要pcre zlib openssl的库,下文都是在官网直接下载用作编译安装 该nginx安装教程,有安装maxmind IP 库 该nginx安装教程有安装lua-nginx-mod ...