自动化巡检脚本模板

check_server.sh

bash

运行

#!/bin/bash

# ====================== 配置项 ======================
# 报告保存路径
REPORT_DIR="/tmp/server_check"
mkdir -p $REPORT_DIR
REPORT_FILE="${REPORT_DIR}/check_$(date +%Y%m%d_%H%M%S).log"

# 磁盘使用率告警阈值(%)
DISK_THRESHOLD=80
# CPU 负载阈值
LOAD_THRESHOLD=5
# 内存使用率阈值
MEM_THRESHOLD=90
# ===================================================

echo "==================== 服务器巡检报告 ====================" > $REPORT_FILE
echo "巡检时间: $(date)" >> $REPORT_FILE
echo "主机名: $(hostname)" >> $REPORT_FILE
echo "IP地址: $(hostname -I | awk '{print $1}')" >> $REPORT_FILE
echo "========================================================" >> $REPORT_FILE
echo >> $REPORT_FILE


# 1. 系统信息
echo "【1. 系统信息】" >> $REPORT_FILE
echo "--------------------------------------------------------" >> $REPORT_FILE
echo "系统版本:" >> $REPORT_FILE
cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2 >> $REPORT_FILE
echo "运行时间:" $(uptime | awk -F'up ' '{print $2}' | awk -F',' '{print $1}') >> $REPORT_FILE
echo "当前用户:" $(whoami) >> $REPORT_FILE
echo >> $REPORT_FILE


# 2. CPU 负载
echo "【2. CPU 负载】" >> $REPORT_FILE
echo "--------------------------------------------------------" >> $REPORT_FILE
uptime >> $REPORT_FILE

CPU_LOAD=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | cut -d. -f1)
if [ $CPU_LOAD -ge $LOAD_THRESHOLD ]; then
    echo "【告警】CPU 1分钟负载过高: $CPU_LOAD" >> $REPORT_FILE
fi
echo >> $REPORT_FILE


# 3. 内存使用
echo "【3. 内存使用】" >> $REPORT_FILE
echo "--------------------------------------------------------" >> $REPORT_FILE
free -h >> $REPORT_FILE

MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100}' | cut -d. -f1)
if [ $MEM_USAGE -ge $MEM_THRESHOLD ]; then
    echo "【告警】内存使用率过高: $MEM_USAGE%" >> $REPORT_FILE
fi
echo >> $REPORT_FILE


# 4. 磁盘使用率
echo "【4. 磁盘使用率】" >> $REPORT_FILE
echo "--------------------------------------------------------" >> $REPORT_FILE
df -h | grep -E '^/dev/' | sort >> $REPORT_FILE

df -h | grep -E '^/dev/' | awk '{print $1,$5}' | tr -d '%' | while read dev use; do
    if [ $use -ge $DISK_THRESHOLD ]; then
        echo "【告警】磁盘 $use% 超过阈值 $DISK_THRESHOLD%: $dev" >> $REPORT_FILE
    fi
done
echo >> $REPORT_FILE


# 5. 端口监听
echo "【5. 常见端口监听】" >> $REPORT_FILE
echo "--------------------------------------------------------" >> $REPORT_FILE
netstat -ntlp | grep -E ':22|:80|:443|:3306|:8080' >> $REPORT_FILE
echo >> $REPORT_FILE


# 6. 关键服务状态
echo "【6. 关键服务状态】" >> $REPORT_FILE
echo "--------------------------------------------------------" >> $REPORT_FILE

for SERVICE in sshd nginx mysql docker crond; do
    if systemctl is-active --quiet $SERVICE; then
        echo "$SERVICE: 运行中" >> $REPORT_FILE
    else
        echo "$SERVICE: 未运行【告警】" >> $REPORT_FILE
    fi
done
echo >> $REPORT_FILE


# 7. 登录用户
echo "【7. 当前登录用户】" >> $REPORT_FILE
echo "--------------------------------------------------------" >> $REPORT_FILE
who >> $REPORT_FILE
echo >> $REPORT_FILE


echo "==================== 巡检完成 ====================" >> $REPORT_FILE

# 输出报告路径
echo "巡检报告已生成: $REPORT_FILE"
cat $REPORT_FILE

使用方法

  1. 创建脚本

bash

运行

vi check_server.sh
  1. 粘贴内容,保存
  2. 加权限

bash

运行

chmod +x check_server.sh
  1. 运行

bash

运行

./check_server.sh

功能一览

  • 系统版本、运行时间
  • CPU 负载监控 + 告警
  • 内存使用率 + 告警
  • 磁盘使用率 + 告警
  • 常用端口检查(22、80、443、3306…)
  • 关键服务状态(sshd、nginx、mysql、docker…)
  • 当前登录用户
  • 自动生成带时间戳的报告
滚动至顶部