服务器巡检脚本集
背景
手上有几台长期运行的机器,例行检查其实只有三件事:服务还在不在、证书还有几天到期、磁盘还剩多少。这三件事每次手工做一遍要十几分钟,而且容易漏。真正的风险不是做不完,而是做得不规律——三个月没看,才发现备份早就失败了。
设计原则
- 只读:巡检脚本不允许修改被检机器上的任何状态,避免「检查本身造成故障」。
- 可重复:同样输入,同样输出;不依赖执行顺序和操作者记忆。
- 退出码可判:全部正常返回 0,有问题返回非 0,便于挂到定时任务上。
- 说人话:输出里写清「哪一项、什么值、阈值多少」,而不是只吐一个失败。
结构
inspect/
├── check-services.sh # systemd 单元是否 active
├── check-cert-expiry.sh # 证书 notAfter 距今天数
├── disk-usage-report.py # 各挂载点使用率与增长趋势
└── run-all.sh # 汇总执行,统一退出码
两个踩过的坑
坑一:只检查「文件在不在」。 一个 0 字节的页面照样会让 HTTP 返回 200。判断服务是否健康,要看实质指标(响应内容长度、数据库行数、连接数),不能只看状态码。
坑二:阈值写死。 磁盘 80% 对日志盘是警告,对数据盘可能已经危险。阈值必须跟挂载点绑定,而不是全局一个数。
现在的用法
run-all.sh 挂在定时任务上每天跑一次,输出写日志;异常时返回非 0。下载页提供了其中两个脚本的原样版本,可以直接改路径使用。