Linux服务器巡检脚本
Linux服务器巡检脚本
#!/bin/bash
#@Filename: linux-check-v1.sh
#@author: dsys
#@Description: Linux服务器巡检脚本
#@E-mail: dsyslove@163.com
#绿色打印正常状态
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
source /etc/profile
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1
MEMORY_LIMIT=70
DISK_LIMIT=70
CPU_LOAD_LIMIT=$(grep 'physical id' /proc/cpuinfo | sort | uniq | wc -l)
function GRE(){
echo -e "\033[36m$@\033[0m"
}
#红色打印异常状态
function RED(){
echo -e "\033[31m$@\033[0m"
}
function OS_INFO(){
GRE 主机名:`hostname`
if [-e /etc/redhat-release];then
GRE 操作系统版本: `cat /etc/redhat-release`
else
GRE 操作系统版本信息: `cat /etc/os-release`
fi
GRE 运行信息:`uptime` 当前时间:`date +"%Y-%m-%d %H:%M:%S"`
GRE 主机序号:`dmidecode -t system | grep 'Serial Number' | awk '{print $3}'`
GRE 系统语言:`echo $LANG`
GRE 上次关机时间:`last -x | grep shutdown | head -1 | awk '{print $5,$6,$7,$8,$10}'`
GRE 上次重启时间:`last reboot | head -1 | awk '{print $5,$6,$7,$8,$10}'`
GRE 机器IP: `ifconfig |grep 'inet ' |awk {'print$2'}|grep -v '127.0.0.1'`
}
function MEMORY_INFO(){
# 获取内存信息(单次获取避免数据不一致)
mem_info=$(free -m | awk '/Mem/ {print $2, $7}') # 提取总内存和可用内存
read MEM_TOTAL MEM_AVAILABLE <<< $mem_info
# 计算内存使用率(基于可用内存更准确)
MEM_USED=$((MEM_TOTAL - MEM_AVAILABLE))
PERCENT=$(( (MEM_USED * 100) / MEM_TOTAL ))
PERCENT_STR="${PERCENT}%"
if [[ $PERCENT -lt $MEMORY_LIMIT ]]; then
GRE "总内存: ${MEM_TOTAL}M | 可用内存: ${MEM_AVAILABLE}M | 使用率: $PERCENT_STR"
else
RED "总内存: ${MEM_TOTAL}M | 可用内存: ${MEM_AVAILABLE}M | 使用率: $PERCENT_STR"
fi
}
function DISK_INFO(){
df -ah | awk 'NR==1 || ($5~/[0-9]+%/) && ($1!~/^tmpfs$/ && $1!~/^devtmpfs$/)' | column -t
df -ah | awk 'NR>1 && ($5~/[0-9]+%/) && ($1!~/^tmpfs$/ && $1!~/^devtmpfs$/)' | while IFS= read -r line; do
MOUNT_POINT=$(echo "$line" | awk '{print $NF}')
USE=$(echo "$line" | awk '{print $5}' | tr -d '%')
if (( $(echo "$USE > $DISK_LIMIT"|bc -l) ));then
RED $MOUNT_POINT 当前使用磁盘占有率$USE%过高,超过了70%
else
continue
fi
done
}
function CPU_INFO(){
GRE CPU型号:`grep 'model name' /proc/cpuinfo | uniq | awk -F":" "{print $2}"`
cpu_type=$(grep 'model name' /proc/cpuinfo | uniq | awk -F":" '{print $2}') #CPU型号
cpu_arch=$(uname -m) #CPU架构
cpu_number_physical=$(grep 'physical id' /proc/cpuinfo | sort | uniq | wc -l) #物理CPU数
cpu_number_vir=$(grep 'processor' /proc/cpuinfo | wc -l) #逻辑CPU数
cpu_cores=$(grep 'cores' /proc/cpuinfo | uniq | awk -F":" '{print $NF}' ) #每CPU核心数
GRE 物理核心:$cpu_number_physical,逻辑核心数:$cpu_number_vir,每CPU核心数:$cpu_cores,架构:$cpu_arch
LOAD=$(cat /proc/loadavg | awk '{print $3}')
if (( $(echo "$LOAD > $CPU_LOAD_LIMIT" | bc -l) )); then
echo $LOAD
RED 当前CPU物理核心数为$CPU_LOAD_LIMIT,系统15分钟内CPU平均负载为$LOAD,CPU使用率过高
fi
}
function PROCESS_INFO(){
echo "检测进程状态"
}
function report(){
OS_INFO
CPU_INFO
MEMORY_INFO
DISK_INFO
}
report
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
编程之家!
喜欢就支持一下吧