1、由于运维工程师的工作需要,要求每日对服务器进行线上巡检,巡检的指标有系统状态信息、CPU、内存、硬盘、网络这几个大项,

所以编写了一个shell脚本,用于主机每日巡检

这个巡检脚本需要保证SSH服务正常访问,并且需要登录root用户,进行脚本运行

#!/bin/bash
# @Author: danqing
# @Description: Host Daily Check Script
# beseem CentOS6.X CentOS7.X
#
echo "Host Daily Check Script"
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1if [ ! -d /root/check_log  ];thenmkdir /root/check_logecho "/root/check_log检查日志存放目录创建成功"
elseecho "/root/check_log检查日志存放目录已存在"
fifunction getSystem(){
echo ""
echo ""
echo "############################ 系统信息检查 ############################"
Default_LANG=${LANG}
OS=$(uname -o)
Release=$(cat /etc/redhat-release 2>/dev/null)
Kernel=$(uname -r)
Hostname=$(uname -n)
Nowdate=$(date +'%F %T')
LastReboot=$(who -b | awk '{print $3,$4}')
uptime=$(uptime | sed 's/.*up \([^,]*\), .*/\1/')
echo " 语言环境: $Default_LANG"
echo " 系统: $OS"
echo " 发行版本: $Release"
echo " 内核: $Kernel"
echo " 主机名: $Hostname"
echo " 当前时间: $Nowdate"
echo " 最后启动: $LastReboot"
echo " 运行时间: $uptime"
}function getCpu(){
echo ""
echo ""
echo "############################ CPU检查 ############################"
Physical_CPUs=$(grep "physical id" /proc/cpuinfo| sort | uniq | wc -l)
Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l)
CPU_Kernels=$(grep "cores" /proc/cpuinfo|uniq| awk -F ': ' '{print $2}')
CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq)
CPU_Hz=$(cat /proc/cpuinfo | grep "cpu MHz" | uniq | awk -F':' '{sub(/ /,"",$2);printf "%s MHz\n",$2}')
CPU_Arch=$(uname -m)
CPU_Usage=$(cat /proc/loadavg | awk '{print $1}')
echo "物理CPU个数: $Physical_CPUs"
echo "逻辑CPU个数: $Virt_CPUs"
echo "每CPU核心数: $CPU_Kernels"
echo "CPU型号: $CPU_Type"
echo "CPU频率: $CPU_Hz"
echo "CPU架构: $CPU_Arch"
echo "CPU使用率: ${CPU_Usage}%"
}function getMemory(){
echo ""
echo ""
echo "############################ 内存检查 ############################"
Memory_Used=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/1024/1024}'  /proc/meminfo)
Memory_Total=$(awk '/MemTotal/{total=$2}END{print (total)/1024/1024}' /proc/meminfo)
# kb的换算是1000 kB的换算是1024
Memory_Usage=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/total*100}'  /proc/meminfo)
echo "已使用内存/全部内存: ${Memory_Used}GB/${Memory_Total}GB"
echo "内存使用率: ${Memory_Usage}%"
}function getDisk(){
echo ""
echo ""
echo "############################ 硬盘检查 ############################"
Disk_Count=$(lsblk |awk '/disk/{print $1}'|wc -l)
echo "硬盘数量: ${Disk_Count}个"
echo "硬盘分区情况: "
echo "`df -hTP | sort |grep -E "/sd|/mapper" |awk '{print ($1 "\t\n" "  文件系统"$2 "  合计"$3 "  已用"$4 "  剩余"$5 "  使用率"$6 "  挂载点"$7)}'`"
# -P, --portability 使用 POSIX 输出格式,方便shell过滤处理
smartctl -V >&/dev/null
if [ $? -eq 0 ]; thenecho "smartctl工具已安装,可以进行硬盘健康检测: "for i in $(lsblk |awk '/disk/{print $1}')doecho "硬盘"$i   `smartctl -H /dev/$i |grep -Ei "OK|PASSED|FAILED|Failure|Failed"`done
elseecho "smartctl工具未安装,无法进行硬盘健康检测"
fi
# "\n磁盘IO信息:$(iotop -bon 1 &>/dev/null || echo 'iotop 未安装信息获取失败')"
}function getNetwork(){
echo ""
echo ""
echo "############################ 网络检查 ############################"
Network_Device=$(cat /proc/net/dev | awk 'NR>2 && $1 !~/lo/ {sub(/:/,"");print $1}')
for i in $Network_Device
doecho "网卡:$i  状态: $(ip link show $Network_Device | awk 'NR==1{print $9}') RX: $(ethtool -g $Network_Device | grep "RX:" | tail -1 | awk '{print $2}') TX: $(ethtool -g $Network_Device | grep "TX:" | tail -1 | awk '{print $2}')"# rx是接收(receive),tx是发送(transport)Mac_Info=$(ip link | egrep -v "lo" | grep link | awk '{print $2}')echo "MAC地址: $Mac_Info"Private_Ip=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')echo "IP地址: $Private_Ip"# Public_Ip=$(curl ifconfig.me -s)# echo "公网IP地址: $Public_Ip"Gateway=$(ip route | grep default | awk '{print $3}')# echo "网关地址: $Gateway"# Dns_Config=$(grep nameserver /etc/resolv.conf| grep -v "#" | awk '{print $2}' | tr '\n' ',' | sed 's/,$//')# echo "DNS地址: $Dns_Config"echo "网关连接情况: $(ping -c 4 -i 0.5 -W 3 $Gateway &>/dev/null && echo '正常通信' || echo '无法通信')"echo "外网连接情况: $(ping -c 4 -i 0.5 -W 3 baidu.com &>/dev/null && echo '正常通信' || echo '无法通信')"# 发送4次请求包,每次间隔0.5秒,最长等待时间为3秒
done
Listen_Port=$(ss -tuln | grep LISTEN | awk '{print $5}' | awk -F: '{print $2$4}' | sort |uniq -d | tr '\n' ',' | sed 's/,$//')
echo "系统运行的端口: $Listen_Port"
}function check(){
echo "Host Daily Check Script"
getSystem
getCpu
getMemory
getDisk
getNetwork
}RESULTFILE="/root/check_log/check-`date +%Y%m%d`.txt"
check > $RESULTFILE
echo "检查结果:$RESULTFILE"

2、该脚本适用于CentOS6.X CentOS7.X系统,打开终端连接到需要巡检的主机

 vim host_check.sh

3、按i键,然后粘贴上述代码

4、代码太长,并没有截全部,只截取一部分示例

保存退出,然后运行

sh host_check.sh

5、查看巡检日志

vim /root/check_log/check-20221027.txt

6、smartctl工具未安装,无法进行硬盘健康检测

出现这个提示,只需要安装一下就行

yum install smartmontools -y

然后重新运行巡检脚本,输出巡检日志

CentOS系统主机每日巡检脚本相关推荐

  1. Linux CentOS 巡检脚本

    系统巡检脚本,有常用的检查模块,如硬盘.内存.进程等.安全性检查等. 1.巡查脚本 代码如下(示例):xunjian.sh #!/bin/bash#系统状态 host(){while :doclear ...

  2. linux系统巡检脚本

    转自:https://blog.51cto.com/11555417/2046978 #!/bin/bash #主机信息每日巡检 IPADDR=$(ifconfig eth0|grep 'inet a ...

  3. Linux服务器日常巡检脚本分享

    Linux 系统日常巡检脚本,巡检内容包含了,磁盘,内存cpu进程文件更改用户登录等一系列的操作 直接用就行了.报告以邮件发送到邮箱 在log下生成巡检报告. 欢迎关注微信公众号[厦门微思网络].ww ...

  4. shell主机信息每日巡检

    这个脚本是我在使用做安全检测的时候使用的,做edi证书的时候.别人发给我的,现在共享给大家. #!/bin/bash #主机信息每日巡检 #version 2016.08.09 #当前脚本适用于Cen ...

  5. Shell编程练习 - 系统一键巡检脚本

    熟能生巧是老话,学习本身就是一种将别人东西拿过来自己能用的过程.能力有限,今天花费大概7个小时将此系统巡检脚本一一测试修正,内容注解均为自身学识认知之文,不敢苟才,希望能给有兴趣者一丁点帮助启发即可. ...

  6. linux 系统运维日常巡检脚本参考

    巡检是运维工程师日常必进行的一项重要工作, 配合部署的监控系统可以大大的提高工作效率, 轻松管理几十到几千台硬件服务器产品的运行情况. 也是公司业务稳定的重要保障.  巡检结果出现异常也能及时发现, ...

  7. linux服务器巡检脚本shell

    #!/bin/bash #主机信息每日巡检IPADDR=$(ifconfig eth0|grep 'inet addr'|awk -F '[ :]' '{print $13}') #环境变量PATH没 ...

  8. Linux 巡检脚本大全

    Linux 巡检脚本 #!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/roo ...

  9. Linux服务器系统自动巡检脚本生成html报告

    一. 前言 1.在上一篇文章里给大家介绍oracle自动巡检脚本生成html报告,这篇文章介绍linux服务巡检脚本生成html报告. 2.脚本依然是简单脚本语句的堆积,方便大家二次编辑使用. 3.项 ...

最新文章

  1. 如何造出逼真图像?南洋理工Zheng博士论文《基于深度生成学习的逼真图像合成》197页pdf阐述视觉合成工作...
  2. mysql字符串相加函数concat()
  3. 参加第十届的队员给智能车竞赛的建议:抄能力+钞能力使得一届不如一届
  4. MySql允许被远程访问
  5. 连续汗蒸一星期有什么好处?
  6. IoT 爆发前夕,企业架构要面对哪些变革
  7. 撤销工作表保护密码忘记了怎么办?
  8. 视频教程-程序员的数学:线性代数-Python
  9. 我的世界虚无2可直连服务器IP,我的世界虚无世界服务器1.7.10
  10. 国庆长假来啦!这些消遣目的地最适合程序员
  11. eBay、亚马逊、Lazada、Shopee、速卖通、美客多等跨境电商平台,测评自养号需要满足什么条件?listing如何优化?
  12. 2020中国移动OneNET之星物联网创客马拉松大赛
  13. 路由器的基本配置命令
  14. 点餐系统Sprint1总结
  15. 后端面试知识点总结 数据库 mysql
  16. Linux服务器相关命令(更新中)
  17. 动量指标进行空间预测
  18. 计算机报声音怎么弄,excel表格输入数据报语音-excel的语音报数怎么弄出来?
  19. GPO:组策略与系统配置
  20. ASP 3.0高级编程(七)

热门文章

  1. 单链表实现简单选择排序
  2. CCNA-CCP考试命令总结
  3. taro做项目html写在哪里,用Taro写一个微信小程序(一)——开始一个项目
  4. 笔记本只使用Linux是什么体验?
  5. Linux0.11操作系统(哈工大李治军老师)实验楼实验2-系统调用
  6. 关于微信小程序接入珊瑚助手踩过的雷
  7. experiment-02-实验二 numpy的基本使用
  8. 04-27 Mysql 考试 55 分 简答题记录
  9. vue.js用benz-amr-recorder实现播放amr格式音频
  10. TMS320F28335项目开发记录6_28335之cmd文件详解