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批量检测服务器能否ping通和硬盘容量状态并抛出报警的一个脚本-附详细解释的更多相关文章
- python检测服务器是否ping通
好想在2014结束前再赶出个10篇博文来,~(>_<)~,不写博客真不是一个好兆头,至少说明对学习的欲望和对知识的研究都不是那么积极了,如果说这1天的时间我能赶出几篇精致的博文,你们信不信 ...
- Linux利用nc命令脚本批量检测服务器指定端口是否开放
一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...
- 解决redhat linux下IP地址可以ping通,域名无法ping通问题
解决redhat linux下IP地址可以ping通,域名无法ping通 在/etc/resolv.conf中添点东西 格式如下: nameserver xxx.xxx.xxx.xxx nameser ...
- Python批量检测服务器端口可用性与Socket函数使用
socket函数 简述 socket又称套间字或者插口,是网络通信中必不可少的工具.有道是:"无socket,不网络".由于socket最早在BSD Unix上使用,而Unix/L ...
- win server 2012 服务器不能ping通
以windows server 2012作为服务器,服务器能够ping通局域网中的客户端A,但A不能ping通服务器. 解决办法: 确定服务器中系统->远程设置->远程桌面选项下为允许选项 ...
- 为虚机Linux系统设置静态IP,ping通外网并解决相关问题
在虚机中安装完Linux系统后,虚机是ping不通外网的,而默认的动态IP会为之后的Hadoop应用造成不少麻烦,为了减少这些不必要的麻烦,我们把系统的IP设置为静态. 步骤: 修改系统配置文件 命令 ...
- 批量检测服务器是否能telnet连通
# coding: UTF-8import osimport sysimport jsonimport platformfrom _utils.patrol2 import data_format,r ...
- 本地服务器能ping通,但是ssh及各种端口都访问不到---待整理
情况描述: 情况一:后来发现,开机需要很长一段时间之后才能正常的访问那台机器 原因:系统启动时加载的程序多,所以开机需要很长的时间,关掉不用的就可以了 情况二:服务器位于局域网内,有的时候可以访问到, ...
- 服务器能ping通ip,通不了域名解决方案
# 将网卡配置文件配置固定ip后,添加DNS解析,然后重启网卡即可: [root@a ~]# tail -2 /etc/sysconfig/network-scripts/ifcfg-ens160 D ...
随机推荐
- POJ2371【水题】
mdzz- wa了一发,没看清题意,真是智障 //#include <bits/stdc++.h> #include<iostream> #include<string. ...
- dwr学习 之 一、dwr+spring的简单集成
1. 环境搭建 我采用的环境为SpringMVC + myBatis + mySql + maven: 关于使用Eclipse构建Maven的SpringMVC项目,请参考: http://limin ...
- js页面字段的必填验证方法
https://blog.csdn.net/fn_2015/article/details/73498462 <script type="text/javascript" s ...
- Jquery | 基础 | 属性过滤选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [BZOJ5120]无限之环
Description 曾经有一款流行的游戏,叫做InfinityLoop,先来简单的介绍一下这个游戏: 游戏在一个n×m的网格状棋盘上进行,其中有些小方格中会有水管,水管可能在方格某些方向的边界的中 ...
- Hdu 2888 Check Corners (二维RMQ (ST))
题目链接: Hdu 2888 Check Corners 题目描述: 给出一个n*m的矩阵,问以(r1,c1)为左上角,(r2,c2)为右下角的子矩阵中最大的元素值是否为子矩阵的顶点? 解题思路: 二 ...
- 洛谷 P4585 [FJOI2015]火星商店问题
(勿看,仅作笔记) bzoj权限题... https://www.luogu.org/problemnew/show/P4585 对于特殊商品,直接可持久化trie处理一下即可 剩下的,想了一段时间c ...
- 476 Number Complement 数字的补数
给定一个正整数,输出它的补数.补数是对该数的二进制表示取反.注意: 给定的整数保证在32位带符号整数的范围内. 你可以假定二进制数不包含前导零位.示例 1:输入: 5输出: 2解释: 5的 ...
- C. Molly's Chemicals 暴力 + 统计技巧
http://codeforces.com/contest/776/problem/C 一开始做的时候,就发现是预处理前缀和,然后对于每一个前缀和,如果他能成为一个贡献,就是能和前面的某些段 组合成和 ...
- eclipse导入php项目
整个工程的都在一个文件夹里面 怎么把它导入到eclipse里面呢:在eclipse里新建一个与要导入的工程同名工程.