有一些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批量检测服务器能否ping通和硬盘容量状态并抛出报警的一个脚本-附详细解释的更多相关文章

  1. python检测服务器是否ping通

    好想在2014结束前再赶出个10篇博文来,~(>_<)~,不写博客真不是一个好兆头,至少说明对学习的欲望和对知识的研究都不是那么积极了,如果说这1天的时间我能赶出几篇精致的博文,你们信不信 ...

  2. Linux利用nc命令脚本批量检测服务器指定端口是否开放

    一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...

  3. 解决redhat linux下IP地址可以ping通,域名无法ping通问题

    解决redhat linux下IP地址可以ping通,域名无法ping通 在/etc/resolv.conf中添点东西 格式如下: nameserver xxx.xxx.xxx.xxx nameser ...

  4. Python批量检测服务器端口可用性与Socket函数使用

    socket函数 简述 socket又称套间字或者插口,是网络通信中必不可少的工具.有道是:"无socket,不网络".由于socket最早在BSD Unix上使用,而Unix/L ...

  5. win server 2012 服务器不能ping通

    以windows server 2012作为服务器,服务器能够ping通局域网中的客户端A,但A不能ping通服务器. 解决办法: 确定服务器中系统->远程设置->远程桌面选项下为允许选项 ...

  6. 为虚机Linux系统设置静态IP,ping通外网并解决相关问题

    在虚机中安装完Linux系统后,虚机是ping不通外网的,而默认的动态IP会为之后的Hadoop应用造成不少麻烦,为了减少这些不必要的麻烦,我们把系统的IP设置为静态. 步骤: 修改系统配置文件 命令 ...

  7. 批量检测服务器是否能telnet连通

    # coding: UTF-8import osimport sysimport jsonimport platformfrom _utils.patrol2 import data_format,r ...

  8. 本地服务器能ping通,但是ssh及各种端口都访问不到---待整理

    情况描述: 情况一:后来发现,开机需要很长一段时间之后才能正常的访问那台机器 原因:系统启动时加载的程序多,所以开机需要很长的时间,关掉不用的就可以了 情况二:服务器位于局域网内,有的时候可以访问到, ...

  9. 服务器能ping通ip,通不了域名解决方案

    # 将网卡配置文件配置固定ip后,添加DNS解析,然后重启网卡即可: [root@a ~]# tail -2 /etc/sysconfig/network-scripts/ifcfg-ens160 D ...

随机推荐

  1. hdoj1728【搜索的两种写法】

    以前的一道题目,现在拿到总觉得是DFS,然后T掉就没什么想法了,很狗的看了以前的写法(以前还是看题解的AC的),是BFS,每次都要转弯,但是之前你的达到一种他走到了死路,所以才是不得不转弯,写法也是非 ...

  2. TensorFlow图像预处理完整样例

    参考书 <TensorFlow:实战Google深度学习框架>(第2版) 以下TensorFlow程序完成了从图像片段截取,到图像大小调整再到图像翻转及色彩调整的整个图像预处理过程. #! ...

  3. Dima and Magic Guitar CodeForces - 366E

    Dima and Magic Guitar CodeForces - 366E 题意: http://blog.csdn.net/u011026968/article/details/38716425 ...

  4. 题解报告:hdu1231最大连续子序列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 Problem Description 给定K个整数的序列{ N1, N2, ..., NK } ...

  5. PopupWindow(2)简单示例-自定义弹出菜单

    本示例,用 popupWindow 自定义弹出菜单 public class CustomActionProvider extends ActionProvider implements OnMenu ...

  6. 转 PHP scandir() 函数

    实例 列出 images 目录中的文件和目录: <?php $dir = "/images/"; // 以升序排序 - 默认 $a = scandir($dir); // 以 ...

  7. Spring------自动化装配Bean(二)

    上一篇是基于 @ComponentScan自动装配Bean的实现,这一篇将通过java手动装配bean来实现. 手动装配相对于自动装配的优点: 可以自行定义Bean的各个属性. 添加额外的方法调度. ...

  8. discuz x2.5用户注册后邮箱认证后无法收到邮件或者直接进垃圾箱

    又是一个周末,jquery特效继续折腾我那discuz论坛,我开启了个邮箱验证,恶意注册的太恶心了,没有办法. 能稍微屏蔽点,但是问题来了,据亲们反应,无法收到验证邮件,或者有时间直接进入垃圾箱,这个 ...

  9. 动手实现 React-redux(二):结合 context 和 store

    既然要把 store 和 context 结合起来,我们就先构建 store.在 src/index.js 加入之前创建的 createStore 函数,并且构建一个 themeReducer 来生成 ...

  10. 《精通css》笔记

    第2章    选择器,注释 1.要知道常用选择器(id选择器,类选择器,类型选择器,后代选择器,伪类选择器(文档结构之外)) 通用选择器(*{    }) 高级选择器(子选择器,相邻同胞选择器,属性选 ...