设为首页 加入收藏

TOP

linux批量检测服务器能否ping通和硬盘容量状态并抛出报警的一个脚本-附详细解释
2019-09-02 23:07:00 】 浏览:16
Tags:linux 批量 检测 服务器 能否 ping 通和 硬盘 容量 状态 报警 一个 脚本 详细 解释

有一些linux基础,最近刚开始学shell,参考了阿良老师的一个监测服务器硬盘状态的脚本,自己进行了一些扩展,今天比较晚了,后边会把注释放上来,感觉脚本还很不完善,希望大家一起探讨一下,共同学习

20180919: 进行了部分修改和优化

all_hosts.info 文件示例:

192.168.1.1 root 123456

192.168.1.2 root 123456

..

 

脚本正文:

#!/bin/sh

HOST_INFO=/opt/tools/all_hosts.info

TMP_FILE=/opt/tools/all_tmp.log

ALERT_FILE=/opt/tools/all_alert.log
echo null > $TMP_FILE ;#重置临时文件
for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO);#从IP、端口信息文件中读取相关的服务器IP,不是很理解'/^[^#]/'的意思,后边会对此进行补充
do
echo "开始测试服务器:$IP"
ping -c3 $IP 2>&1 >/dev/null;#ping三次
if [ $? -eq 0 ];#测试ping命令是否执行成功
then
echo -e "服务器:$IP 可以连通\n"
else
DATE=`date`
echo -e "注意!!!服务器:$IP 在时间:$DATE 未能连通\n" 2>&1 >>$ALERT_FILE;#执行不成功反馈结果到警告文件
fi
USER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO);#awk -v 取shell中的变量IP,读取登录所用的用户
PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO);#读取ssh端口
echo "-------开始检测测盘占用,详情见文件:all_tmp.log,和报警文件:all_alert.log---------"
echo '------------------------------------------------------------------------------------' >> $TMP_FILE
ssh -p $PORT $USER@$IP 'df -hP' > $TMP_FILE;#读取服务器的磁盘信息,此处存在一个设计漏洞,一旦目标服务器不通或者df卡死,则此处脚本卡死无法继续
if [ $? -gt 0 ];#判断ssh执行是否成功
then
echo -e "`date`请检查服务器:$IP ssh连接\n" 2>&1 >>$ALERT_FILE
fi
USE_RATE_LIST=$( awk 'BEGIN{OFS="="}/^\/dev/{print $1,int($5)}' $TMP_FILE);#建立数组,OFS的用法见附录①,形成/dev/sda=10 这样格式的数组
for USE_RATE in $USE_RATE_LIST
do
PART_NAME=${USE_RATE%=*};#读取数组内容 /dev/sda=10 读取到/dev/sda
USE_RATE=${USE_RATE#*=};#读取数组内容 /dev/sda=10 读取到10
if [ $USE_RATE -ge 80 ];#判断读取到的磁盘利用率是否大于等于80
then
echo -e "警告:服务器:$IP 磁盘:$PART_NAME 使用率: $USE_RATE"
echo -e "警告(`date`):服务器:$IP 磁盘:$PART_NAME 使用率: $USE_RATE" 2>&1 >> $ALERT_FILE
fi
done
done
rm -f $TMP_FILE

附录:

①:awk RS ORS FS OFS 的用法:

https://www.cnblogs.com/fhefh/archive/2011/11/16/2251656.html

附 :

阿良老师脚本(测试版,改动了文件路径等):

#!/bin/bash
HOST_INFO=/opt/tools/stat_host.info
TMP_FILE=/opt/tools/tmp_stat_disk.log
date > $TMP_FILE
echo '------------------------------------------------------------------------------------' >> $TMP_FILE
for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); do
USER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO)
PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO)
echo '------------------------------------------------------------------------------------' >> $TMP_FILE
echo $IP >> $TMP_FILE
ssh -p $PORT $USER@$IP 'df -h -P' >> $TMP_FILE
USE_RATE_LIST=$( awk 'BEGIN{OFS="="}/^\/dev/{print $1,int($5)}' $TMP_FILE)
for USE_RATE in $USE_RATE_LIST; do
PART_NAME=${USE_RATE%=*}
USE_RATE=${USE_RATE#*=}
if [ $USE_RATE -ge 80 ]; then
echo "Warning: $PART_NAME Partition usage $USE_RATE%!" 
fi
done
done
more $TMP_FILE

 

更新日志:

20180920:(待解决)ssh或者df命令执行不成功整个脚本卡死问题

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇linux学习笔记 磁盘存储之磁盘的.. 下一篇IO多路复用(二) -- select、pol..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目