linux自动化巡检脚本核心是稳定轻量、贴合运维场景,聚焦资源水位、服务状态、异常日志、连通权限四类高频问题,用标准命令实现结构化输出与定时集成。

Linux 自动化巡检脚本的核心目标是及时发现系统异常、降低人工排查成本、形成可追溯的运行基线。它不是功能越全越好,而是要贴合实际运维场景——稳定、轻量、易读、可维护。
明确巡检范围,避免“大而全”
盲目覆盖所有指标会导致脚本臃肿、执行慢、告警噪音高。建议从以下四类高频问题切入:
- 资源水位:CPU 使用率(15 分钟负载 > 0.7 × CPU 核数)、内存剩余 85%
-
关键服务状态:sshd、crond、rsyslog 等必须存活;可通过
systemctl is-active --quiet 服务名判断 - 异常日志线索:/var/log/messages 或 journal 日志中近 1 小时内 “OOM killed process”、“kernel: panic”、“connection refused” 等关键词
- 基础连通与权限:SSH 端口可连通、/etc/passwd 不可写、关键目录(如 /root、/etc/ssh)权限符合 600/700 要求
用标准工具组合,不依赖第三方
优先使用系统自带命令,减少环境适配负担。例如:
AutoIt v3 版本, 这是一个使用类似 BASIC 脚本语言的免费软件, 它设计用于 Windows GUI(图形用户界面)中进行自动化操作. 利用模拟键盘按键, 鼠标移动和窗口/控件的组合来实现自动化任务. 而这是其它语言不可能做到或无可靠方法实现的(比如VBScript和SendKeys). AutoIt 非常小巧, 完全运行在所有windows操作系统上.(thesnow注:现在已经不再支持win 9x,微软连XP都能放弃, 何况一个win 9x支持), 并且不需要任何运行库. AutoIt
- 磁盘检查:
df -P | awk '$5+0 > 85 {print $1, $5}'(-P 保证输出格式统一) - 进程检查:
ps aux --sort=-%cpu | head -n 6 | tail -n +2(排除标题行,取前 5 个高 CPU 进程) - 日志扫描:
journalctl --since "1 hour ago" | grep -i -E "(oom|panic|refused|failed)" | tail -n 10 - 权限校验:
stat -c "%a %n" /root /etc/ssh/sshd_config | awk '$1 != "700" && $1 != "600" {print $0}'
输出结构化,便于后续处理
巡检结果不应只是终端打印,需支持多种输出方式:
- 默认输出为带时间戳的纯文本(
$(date '+%Y-%m-%d %H:%M:%S')开头),每项检查独占一行,格式统一为:[OK] /dev/sda1 usage: 72%或[WARN] sshd service is inactive - 添加
-j参数可输出 JSON,字段包含host、timestamp、checks(数组,每项含name、status、detail) - 支持
-o /path/to/report.log写入文件,并自动按天轮转(如 report_20240615.log)
集成到定时任务,但留出人工干预入口
通过 crontab 每 30 分钟执行一次,但设计上需兼顾安全与可控性:
- 脚本开头校验执行用户是否为 root(
[[ $EUID -ne 0 ]] && { echo "Error: must run as root"; exit 1; }) - 加入
-d调试模式:只打印将要执行的命令,不真正运行检测逻辑 - 关键操作(如重启服务)默认禁用,需显式传参
--fix才触发,且每次执行前二次确认 - 失败时自动发送邮件(调用
mail -s "ALERT: $(hostname)巡检异常" admin@example.com),但仅发摘要(如“3 项 WARN,1 项 FAIL”),详情查日志
不复杂但容易忽略的是:每次更新脚本后,务必在测试机验证输出格式和退出码(0=全OK,1=部分WARN,2=FAIL),并确保 cron 环境变量(PATH、LANG)与交互式 shell 一致。









