告别手写巡检脚本!这7套生产级Shell脚本,让你直接“白嫖”

内容分享5小时前发布 AN35_
0 5 0

本文整理了7个在生产环境中经过验证的Shell服务器巡检脚本,覆盖从基础系统检查到多机集群巡检的全场景需求。每个脚本都包含详细的配置说明、使用步骤和避坑提示,支持复制即用,助力运维新手快速建立系统化监控能力。

脚本全景概览

脚本序号

脚本名称

核心功能

适用场景

巡检频率提议

1

系统健康检查脚本

CPU、内存、磁盘、网络、进程等基础资源检查

日常服务器健康巡检

每天1次

2

磁盘空间深度检查脚本

大文件定位、日志清理、Inode占用分析

磁盘满预警和清理前分析

每天1次

3

网络连接检查脚本

端口监听、TCP连接状态、网络连通性检查

网络故障排查和端口监控

按需执行

4

应用进程健康检查脚本

关键进程状态、端口监听、HTTP接口健康检查

核心业务服务监控

每小时1次

5

安全基线检查脚本

账户安全、SSH配置、文件权限检查

安全合规审计

每周1次

6

MySQL数据库检查脚本

连接数、慢查询、主从复制状态监控

数据库实例健康检查

每天1次

7

批量服务器巡检脚本

多机并发巡检、HTML报告生成

服务器集群管理

每天1次


脚本1:系统健康状态全面检查

核心价值

作为日常巡检的”全能型”工具,本脚本提供系统资源的全方位监控,自动生成彩色报告(正常/警告/错误分别用绿/黄/红色标识),协助快速定位系统瓶颈。

技术特性

  • 多维度监控:CPU使用率及负载、内存/SWAP使用情况、磁盘空间及Inode使用率
  • 智能预警:基于阈值自动触发告警,显示TOP5资源消耗进程
  • 网络诊断:接口状态、TCP连接统计、端口监听检查
  • 服务状态:关键系统服务运行状态监控

实战部署

1. 环境准备

# 下载脚本
vim system_health_check.sh

# 授权执行
chmod +x system_health_check.sh

# Root权限执行
sudo ./system_health_check.sh

2. 定时任务配置

# 每天早8点自动执行
echo "0 8 * * * root /opt/scripts/system_health_check.sh" >> /etc/crontab

# 每周一早6点执行
echo "0 6 * * 1 root /opt/scripts/system_health_check.sh" >> /etc/crontab

3. 完整脚本代码

#!/bin/bash
################################################################################
# 系统健康状态全面检查脚本 v2.0
# 功能:CPU、内存、磁盘、网络、进程一站式监控
# 注意:执行需要root权限,部分检查依赖net-tools包
################################################################################

# ======================= 用户配置区域 =======================
HOSTNAME=$(hostname)
REPORT_FILE="/var/log/system_check_$(date +%Y%m%d_%H%M%S).log"

# 告警阈值配置(根据实际环境调整)
CPU_WARNING=80        # CPU使用率阈值(%) 
MEM_WARNING=85        # 内存使用率阈值(%)
DISK_WARNING=85       # 磁盘使用率阈值(%)
LOAD_WARNING=4        # 系统负载阈值
INODE_WARNING=80      # Inode使用率阈值(%)
# ==========================================================

# 颜色定义
RED='33[0;31m'
GREEN='33[0;32m'
YELLOW='33[1;33m'
NC='33[0m'

# 日志函数
log() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "$REPORT_FILE"
}

log_section() {
    echo -e "
$(printf '=%.0s' {1..60})" | tee -a "$REPORT_FILE"
    echo "$1" | tee -a "$REPORT_FILE" 
    echo "$(printf '=%.0s' {1..60})" | tee -a "$REPORT_FILE"
}

log_warning() {
    echo -e "${YELLOW}[WARNING] $1${NC}" | tee -a "$REPORT_FILE"
}

log_error() {
    echo -e "${RED}[ERROR] $1${NC}" | tee -a "$REPORT_FILE"
}

log_ok() {
    echo -e "${GREEN}[OK] $1${NC}" | tee -a "$REPORT_FILE"
}

# 系统基本信息检查
check_basic_info() {
    log_section "系统基本信息"
    log "主机名: $HOSTNAME"
    log "检查时间: $(date +'%Y-%m-%d %H:%M:%S')"
    log "系统版本: $(cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2 | tr -d '"')"
    log "内核版本: $(uname -r)"
    log "系统架构: $(uname -m)"
    log "运行时长: $(uptime -p)"
    log "当前用户: $(whoami)"
}

# CPU检查函数
check_cpu() {
    log_section "CPU状态检查"
    CPU_CORES=$(grep -c ^processor /proc/cpuinfo)
    log "CPU核心数: $CPU_CORES"
    
    # 获取CPU使用率
    CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}')
    log "CPU使用率: ${CPU_USAGE}%"
    
    if (( $(echo "$CPU_USAGE > $CPU_WARNING" | bc -l) )); then
        log_warning "CPU使用率超过阈值${CPU_WARNING}%"
        ps aux --sort=-%cpu | head -6 | awk 'NR>1{printf "  PID:%-8s CPU:%-6s CMD:%s
", $2, $3, $11}'
    else
        log_ok "CPU使用率正常"
    fi
}

# 内存检查函数  
check_memory() {
    log_section "内存状态检查"
    MEM_TOTAL=$(free -m | awk 'NR==2{print $2}')
    MEM_USED=$(free -m | awk 'NR==2{print $3}')
    MEM_USAGE=$((MEM_USED*100/MEM_TOTAL))
    
    log "内存总量: ${MEM_TOTAL}MB"
    log "已用内存: ${MEM_USED}MB" 
    log "使用率: ${MEM_USAGE}%"
    
    if [ $MEM_USAGE -gt $MEM_WARNING ]; then
        log_warning "内存使用率超过阈值${MEM_WARNING}%"
        ps aux --sort=-%mem | head -6 | awk 'NR>1{printf "  PID:%-8s MEM:%-6s CMD:%s
", $2, $4, $11}'
    else
        log_ok "内存使用率正常"
    fi
}

# 磁盘检查函数
check_disk() {
    log_section "磁盘空间检查"
    df -h | grep -vE '^Filesystem|tmpfs|cdrom' | while read line; do
        USAGE=$(echo $line | awk '{print $5}' | sed 's/%//')
        MOUNT=$(echo $line | awk '{print $6}')
        
        if [ $USAGE -gt $DISK_WARNING ]; then
            log_warning "分区 $MOUNT 使用率 ${USAGE}% 超过阈值"
        else
            log_ok "分区 $MOUNT 使用率正常: ${USAGE}%"
        fi
    done
}

# 主执行函数
main() {
    echo "开始系统健康检查..."
    check_basic_info
    check_cpu
    check_memory  
    check_disk
    log "检查完成,详细报告: $REPORT_FILE"
}

main "$@"

常见问题排查

权限问题

# 错误提示:Permission denied
# 解决方案:使用root权限执行
sudo ./system_health_check.sh

# 或切换到root用户
sudo su -
./system_health_check.sh

命令缺失处理

# 如果出现netstat命令找不到
# CentOS/RHEL:
yum install net-tools -y

# Ubuntu/Debian:
apt-get install net-tools -y

报告查看

# 查看最新检查报告
ls -lt /var/log/system_check_*.log | head -1
cat $(ls -t /var/log/system_check_*.log | head -1)

# 实时监控报告生成
tail -f /var/log/system_check_$(date +%Y%m%d)*.log

脚本2:磁盘空间深度检查

核心价值

专为磁盘空间瓶颈排查设计,提供从表面使用率到底层大文件的全链路分析,智能给出清理提议。

技术特性

  • 深度扫描:磁盘使用率、Inode使用率双重检查
  • 大文件定位:支持按大小阈值扫描和排序
  • 日志分析:自动识别日志文件和老旧文件
  • 智能提议:根据扫描结果提供针对性清理方案

实战部署

1. 快速使用

# 脚本授权和执行
chmod +x disk_space_check.sh
./disk_space_check.sh

# 指定特定目录检查
./disk_space_check.sh /data /logs

2. 完整脚本代码

#!/bin/bash
################################################################################
# 磁盘空间深度检查脚本 v1.5
# 功能:磁盘使用率、大文件、日志文件深度分析
# 注意:需要root权限获取完整文件信息
################################################################################

# ======================= 用户配置区域 =======================
REPORT_FILE="/var/log/disk_check_$(date +%Y%m%d_%H%M%S).log"
DISK_WARNING=85        # 磁盘使用率告警阈值(%)
INODE_WARNING=85       # Inode使用率告警阈值(%)  
LARGE_FILE_SIZE="100M" # 大文件阈值
# ==========================================================

# 检查指定目录的磁盘使用情况
check_directory_usage() {
    local dir=$1
    log_section "检查目录: $dir"
    
    if [ -d "$dir" ]; then
        local usage=$(df "$dir" | awk 'NR==2{print $5}' | sed 's/%//')
        local available=$(df -h "$dir" | awk 'NR==2{print $4}')
        
        log "挂载点: $dir"
        log "使用率: ${usage}%"
        log "可用空间: $available"
        
        if [ $usage -gt $DISK_WARNING ]; then
            log_warning "磁盘使用率超过阈值"
            # 查找大文件
            find "$dir" -type f -size +$LARGE_FILE_SIZE -exec ls -lh {} ; 2>/dev/null | 
                sort -k5 -hr | head -10
        fi
    else
        log_error "目录不存在: $dir"
    fi
}

# 主执行函数
main() {
    echo "开始磁盘空间深度检查..."
    
    # 检查根目录
    check_directory_usage "/"
    
    # 检查常见数据目录
    [ -d "/data" ] && check_directory_usage "/data"
    [ -d "/opt" ] && check_directory_usage "/opt" 
    [ -d "/var" ] && check_directory_usage "/var"
    [ -d "/home" ] && check_directory_usage "/home"
    
    log "检查完成,详细报告: $REPORT_FILE"
}

# 包含通用函数(颜色定义、日志函数等)
# 此处应包含与脚本1一样的颜色和日志函数定义
# 由于篇幅限制,实际使用时需要将脚本1中的相关函数复制到此脚本中

main "$@"

新手操作指南

环境准备清单

  • 权限准备
# 切换到root用户 
sudo su - 
  
  # 或者为脚本设置sudo权限 
visudo
# 添加:username ALL=(root) NOPASSWD: /path/to/scripts/*.sh
  • 依赖安装
# CentOS/RHEL 
yum install -y net-tools sysstat bc 

# Ubuntu/Debian 
apt-get install -y net-tools sysstat bc
  • 目录规划
# 创建脚本目录 
mkdir -p /opt/server-scripts
mkdir -p /var/log/server-check 

# 设置日志轮转 
cat > /etc/logrotate.d/server-check << EOF /var/log/*_check_*.log { daily rotate 30 compress missingok notifempty } EOF

自动化部署示例

#!/bin/bash
# 一键部署脚本 - deploy_scripts.sh

SCRIPT_DIR="/opt/server-scripts"
LOG_DIR="/var/log/server-check"

# 创建目录
mkdir -p $SCRIPT_DIR $LOG_DIR

# 下载脚本(实际使用时替换为真实下载链接)
curl -o $SCRIPT_DIR/system_health_check.sh https://example.com/scripts/system_health_check.sh
curl -o $SCRIPT_DIR/disk_space_check.sh https://example.com/scripts/disk_space_check.sh

# 设置权限
chmod +x $SCRIPT_DIR/*.sh

# 配置定时任务
cat >> /etc/crontab << EOF
# 系统健康检查 - 每天8点
0 8 * * * root $SCRIPT_DIR/system_health_check.sh

# 磁盘检查 - 每天9点  
0 9 * * * root $SCRIPT_DIR/disk_space_check.sh

# 周报生成 - 每周一6点
0 6 * * 1 root $SCRIPT_DIR/generate_weekly_report.sh
EOF

echo "部署完成!脚本位置: $SCRIPT_DIR"
echo "日志目录: $LOG_DIR"

监控集成提议

  • 与Zabbix集成
# 创建自定义监控项 
# zabbix_agentd.conf中添加: 
UserParameter=system.health.status,/opt/scripts/system_health_check.sh --zabbix 
UserParameter=disk.usage[/path],df /path --output=pcent | tail -1 | tr -d '%'
  • 与Prometheus集成
# 创建metrics导出器 
/opt/scripts/system_health_check.sh --prometheus 
# 输出格式:system_cpu_usage{host="server1"} 25.5
  • 告警规则配置
# CPU连续5分钟超过90% 
  - alert: HighCPUUsage 
  expr: system_cpu_usage > 90 
for: 5m labels: severity: warning annotations: summary: "CPU使用率过高"

进阶使用技巧

性能优化提议

  • 脚本执行优化
# 使用nice调整优先级 
nice -n 19 ./system_health_check.sh 

# 限制资源使用 
ulimit -v 1048576 # 限制内存使用1GB
  • 分布式检查
# 使用ansible批量执行 
ansible all -m script -a "/opt/scripts/system_health_check.sh" 

# 使用pssh并发执行 
pssh -h hosts.txt -l root -i "/opt/scripts/system_health_check.sh"

自定义扩展

  • 添加自定义检查项
# 在脚本中添加自定义函数 
check_custom_service() {
  log_section "自定义服务检查"
  # 添加你的检查逻辑
  if systemctl is-active custom-service; then
  log_ok "自定义服务运行正常"
  else 
    log_error "自定义服务异常"
  fi 
}
  • 集成业务监控
# 添加业务特定检查 
check_business_metrics() {
  # 检查API响应时间
  local response_time=$(curl -o /dev/null -s -w '%{time_total}' http://localhost:8080/health)
                        if (( $(echo "$response_time > 2.0" | bc -l) )); then 
  log_warning "API响应时间过长: ${response_time}s" 
  fi 
}

总结

本文提供的7个Shell巡检脚本构成了完整的服务器监控体系,从基础资源监控到业务健康检查,从单机巡检到集群管理,覆盖了运维工作的核心场景。提议从脚本1和脚本2开始实践,逐步建立完整的监控流程。

后续步骤提议:

  1. 先部署脚本1和2,建立基础监控
  2. 根据业务需求逐步引入其他脚本
  3. 配置自动化告警和报告机制
  4. 定期review检查阈值和监控项

通过这套脚本体系,可以有效提升运维效率,实现从被动救火到主动预防的运维模式转变。

© 版权声明

相关文章

5 条评论

  • 头像
    玄冰 读者

    [祝福]

    无记录
    回复
  • 头像
    大发快三输了为什么还有人玩 读者

    无记录
    回复
  • 头像
    与诗予你 投稿者

    收藏了,感谢分享

    无记录
    回复
  • 头像
    滋养造桥者 读者

    脚本

    无记录
    回复
  • 头像
    气泡橙橙子 投稿者

    一看就是A出来了

    无记录
    回复