一、 写作背景
1.1 工作环境
笔者工作与一家互联网类型工作,在内网有10台物理机搭建了VM虚拟化环境,上面搭建100+台虚拟机,采用vCenter进行集中管理,工作过程中,有部分设备死机、或其它故障引起设备无法访问,故采用一个自动执行的脚本来检测系统是否正常运行,如果没有正常运行,就自动发邮件给管理员。
1.2 系统环境
本脚本在Linux系统环境下运行CentOS Linux release 7.3.1611 (Core) Linux 3.10.0-514.26.2.el7.x86_64
,通过读取相应的日志文件,输入文件,进行判断,然后根据情况发送给管理员邮件。
二、 软件环境搭建
2.1 软件安装
系统采用默认安装,具体安装方法不再赘述,网上很多。
由于要发送邮件,需要安装Sendmail、mutt
,这里采用yum安装。
yum install sendmail mutt -y
启动并加入开机启动
systemctl enable --now sendmail
2.2 邮件客户端配置
修改发件客户端配置文件如下:
vim /etc/Muttrc +473
set charset="utf-8" #设置发邮件编码
vim /etc/Muttrc +961
set encode_from=yes
vim /etc/Muttrc +1183
set from="zhen.guo@...........com" #发送人地址
vim /etc/Muttrc +3150
set realname="机器报警" #发件人别名
vim /etc/Muttrc +3303
set rfc2047_parameters=yes #解决附件乱码问题
vim /etc/Muttrc +4555
set use_from=yes #指定是否显示别名
···
## 三、 脚本 ##
### 3.1 脚本文件及说明 ###
```shell
#!/bin/bash
# 脚本代码
DATE='date +%F_%H:%M' #定义时间
LOG=/root/ping.log #定义日志路径
IP=/root/ip.txt #定义ip列表
CLEAN='cat $LOG | wc -l #获取日志数量
for i in $(cat $IP); #循环读取IP列表
do #开始执行
ping -c 2 $i &>/dev/null
if [$? -eg 0 ];then
#写入日志内容到日志文件。
echo "$Data $i Host ping is success." >> $LOG
else
echo -e "Date:$DATE \nHost:$i \nProblem: Ping is failed, please check!!!" | mutt -s"Ping" xxx@xxx.com
fi
done
#如果日志文件超过一定数量,则清空
if [$CLEAN -ge 30 ];then
echo "" > $LOG
fi
四、 添加到任务计划
4.1 添加到任务计划
具体使用方法另文做介绍。命令如下:
crontab -e
* /5 * * * * /bin/bash /root/ping.sh #添加命令格式,最后为脚本所在路径。
4.2 重启任务计划
任务计划查看:
orntab -l
任务计划重启:
systemctl restart crond
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin