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 ...
随机推荐
- vector刘汝佳算法入门学习笔记
//*****-*-----vector***/////// 常用操作封装,a.size();可以读取大小 a.resize();可以改变大小: ...
- MySQL `explicit_defaults_for_timestamp` 与 TIMESTAMP
考察下面的 SQL 脚本: CREATE TABLE test1( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, data VARCHAR(20), ts1 ...
- jQuery笔记之工具方法
jQuery 工具方法 $.type()判断数据类型 $.isArray() $.isFunction() $.isWindow()... $.trim()消除空格 $.proxy()改变this指向 ...
- 《对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们》的问题的解决方法
<对“XXX::Invoke”类型的已垃圾回收委托进行了回调.这可能会导致应用程序崩溃.损坏和数据丢失.向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们& ...
- [NewTrain 10][poj 2329]Nearest Number - 2
题面: http://poj.org/problem?id=2329 题解: 这题有很多做法 1. 搜索 复杂度$O(n^4)$ 但是实际上远远达不到这个复杂度 所以可以通过 2. 对于每一个格子,我 ...
- adb shell报错:error: insufficient permissions for device的解决办法
1.错误描述 执行 adb shell 时,报错如下; error: insufficient permissions for device 2.解决办法 1,终端执行 lsusb 结果如下,注意绿 ...
- Steps to Resolve the Database JAVAVM Component if it Becomes INVALID After Applying an OJVM Patch
11.2.0.2升级到11.2.0.4 memory_target 设置过小,只有800M. 导致jserver jave virtual machine 组件无法安装, 建议升级之前至少memory ...
- [已读]Sass与Compass实战
介绍了Sass基础语法与Compass框架,这个网上参考文档就OK了,另外介绍了compass生成图片精灵和相应的css,貌似现在单纯用sass和compass的挺少,要不grunt,要不FIS,而g ...
- C. Memory and De-Evolution 逆向思维
http://codeforces.com/contest/712/problem/C 要使得把三角形由边长n变成m,等价于由m变成n 如果是从n变成m,则很难判断每次判断变成多少.比如22的变成4, ...
- 【学习笔记】二:在HTML中使用JavaScript
1.<script>标签 1)考虑到最大限度的浏览器兼容性和约定俗成,type属性使用:text/javascript. 2)标签建议放置到</body>标签前,提高用户体验( ...