守护进程监控巡检脚本核心是轻量、稳定、可回溯,通过pgrep+kill-0校验进程真实状态,curl健康端点判断业务可用性,ps精确采集资源快照并设阈值告警,tail+grep扫描关键错误,json lines格式聚合数据便于jq分析与轮转。

守护进程的监控巡检脚本核心在于“轻量、稳定、可回溯”——不依赖复杂框架,用基础命令组合实现状态采集、异常识别和日志留存。
服务存活与进程级状态检查
先确认进程是否在运行,再验证其响应能力。单纯 ps 匹配容易误判(如进程名被复用),建议结合 pidof 或 pgrep 获取 PID 后校验状态:
- 用 pgrep -f "your_service_name" 提取真实 PID,避免匹配到日志或启动脚本中的字符串
- 对每个 PID 执行 kill -0 $pid 2>/dev/null,成功返回表示进程存在且有权限访问
- 若服务提供健康端点(如 /health),用 curl -sfL --max-time 3 http://127.0.0.1:port/health | grep -q "up" 辅助判断业务可用性
CPU、内存与资源占用快照
守护进程长期运行易出现缓慢泄漏,需定期记录资源基线。避免用 top(交互式、难解析),改用 ps 精确字段输出:
- ps -o pid,ppid,%cpu,%mem,rss,vsz,comm -p $pid 获取单进程实时资源占用
- 将 RSS(物理内存)和 %CPU 持续写入时间戳文件,例如:echo "$(date +%s),$(ps -o rss= -p $pid 2>/dev/null)" >> mem_history.csv
- 设置阈值告警:RSS 超过 500MB 或 CPU 持续 >80% 超过 3 次采样,触发通知
关键日志与错误模式扫描
不全量读日志,只抓“最近 N 行 + 匹配关键词”,兼顾效率与敏感信息捕获:
- 用 tail -n 100 /var/log/your_service.log | grep -E "(ERROR|panic|segfault|failed to start)"
- 记录匹配行数及最新一条时间戳,例如:grep -E ... | tail -1 | cut -d' ' -f1-2
- 对反复出现的错误码(如 Connection refused 连续 5 次),标记为疑似依赖故障,联动检查下游服务
数据聚合与简易可视化留存
每次巡检结果本地落盘,形成可追溯的时间序列:
- 每轮生成统一格式的 JSON 行(JSON Lines):{"ts":1717023456,"pid":1234,"cpu":12.3,"rss_mb":420,"health":"ok","errors":0}
- 用 jq 快速查历史趋势,例如:jq 'select(.rss_mb > 500)' monitor.jsonl | head -5
- 配合 cron 每 5 分钟执行一次,保留最近 7 天数据,旧文件自动轮转压缩











