你的服务器还在裸奔吗?这份Bash系统巡检脚本让运维效率翻倍

2026年01月20日/ 浏览 12

凌晨三点被报警短信吵醒的运维人都懂——系统不会在你上班时间出故障。当服务器突然抽风,那些临时手敲的检查命令就像用勺子舀干大海,而真正的老司机早就准备好了自动化巡检武器库。

为什么说Bash脚本是运维的瑞士军刀

打开终端输入命令谁都会,但连续三天重复同样的检查流程呢?人类会漏看红色报警信息,脚本永远不会。某次磁盘爆满事故后,我亲眼见过运维总监当着全团队的面,把手工检查文档撕得粉碎——纸片在空中飘落的弧线,就是传统巡检方式的葬礼。

用vim写出的几十行代码,能比年薪百万的专家更早发现隐患。这不是魔法,而是把df -h、free -m、netstat -tulnp这些基础命令变成永不疲倦的电子哨兵。当你的脚本开始定期输出彩色标记的报表,连CEO都会在周会上引用这些数据——虽然他可能以为这是某种黑科技AI。

从零构建企业级巡检脚本

别被"企业级"吓到,最实用的巡检脚本往往简单得令人发指。新建一个check.sh文件,塞进这些核心模块:

系统负载三剑客

echo -e "\033[31m====== CPU负载 ======\033[0m" uptime | awk {print "最近1/5/15分钟平均负载:",$10,$11,$12} top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk {print "CPU空闲率:",100-$1"%"}

内存检查的暴力美学

echo -e "\n\033[32m====== 内存使用 ======\033[0m" free -m | grep Mem | awk {printf "总内存:%dMB 已用:%dMB 使用率:%.2f%\n",$2,$3,$3/$2*100}

加上定时任务配置crontab -e,让脚本每天凌晨悄悄执行:

0 3 * * * /root/check.sh | mail -s "每日巡检报告" admin@company.com

那些教科书不会告诉你的实战技巧

见过太多"理论上完美"的脚本在实际环境翻车。某次/tmp目录被占满导致业务崩溃后,我现在的脚本会特别检查这个狡猾的陷阱:

检查/tmp目录是否超过90%

df /tmp | awk NR==2 {if($5 > 90) print "\033[31m警告: /tmp使用率"$5"\033[0m"}

更阴险的是**僵尸进程**——它们像吸血鬼一样慢慢吸干系统资源。这个组合拳能揪出这些幽灵: ```bash ps -A -ostat,ppid | grep -e ^[Zz] | awk {print "僵尸进程PPID:",$2}

当脚本开始比你更懂服务器

上周脚本突然发邮件报警"某台机器SYN队列溢出",而监控系统毫无反应。后来发现是

内核参数

net.ipv4.tcp_max_syn_backlog设置过小 ,这个连资深架构师都容易忽略的细节,被几行Bash代码拯救了:netstat -s | grep -i "SYNs to LISTEN" | awk {if($1 > 1000) print "SYN洪水攻击风险!"}

现在我的脚本已经进化到会检查证书过期时间数据库连接池状态甚至容器健康度。每次看到它比商业监控软件更早发现问题时,都会想起那个运维真理:最强大的工具往往就藏在你的终端里

小贴士:给脚本添加#!/bin/bash -x参数,运行时每个命令都会打印出来——就像给巡检过程装上行车记录仪【】

picture loss