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
使用方法
- 创建脚本
bash
运行
vi check_server.sh
- 粘贴内容,保存
- 加权限
bash
运行
chmod +x check_server.sh
- 运行
bash
运行
./check_server.sh
功能一览
- 系统版本、运行时间
- CPU 负载监控 + 告警
- 内存使用率 + 告警
- 磁盘使用率 + 告警
- 常用端口检查(22、80、443、3306…)
- 关键服务状态(sshd、nginx、mysql、docker…)
- 当前登录用户
- 自动生成带时间戳的报告