要监控 systemd 服务自动重启,需结合 journalctl 查日志与 systemctl 查状态:先用 systemctl cat 或 show 确认 Restart= 和 StartLimitBurst/IntervalSec 配置;再用 journalctl -u 服务名 筛选 “Scheduled restart job”“started”“exited code=” 等关键日志区分手动与自动重启,并可脚本化统计短时重启次数触发告警。

要监控 systemd 服务的自动重启记录,核心是结合 journalctl 查看日志 + systemctl 检查状态与配置,重点抓取“重启触发”和“重启执行”两个环节的日志证据。
确认服务是否启用了自动重启机制
自动重启由服务单元文件中的 Restart= 参数控制。先查当前生效配置:
- 运行
systemctl cat 服务名.service,查看[Service]段里的Restart值(如on-failure、always) - 检查是否设置了防抖保护:
StartLimitBurst和StartLimitIntervalSec,避免短时高频崩溃被 systemd 拦停 - 若用
systemctl edit 服务名覆盖过配置,需用systemctl show -p Restart,StartLimitBurst 服务名获取最终生效值
定位服务每次重启的具体时间点
systemd 在服务启动/重启时会写入标准日志条目,可精准提取:
- 查最近 10 次重启动作:
journalctl -u 服务名 --since "7 days ago" | grep -i "started\|restarted\|starting" - 只看本次启动以来的重启事件:
journalctl -b -u 服务名 | grep -E "(Started|Starting) .*服务名" - 配合退出码排查异常重启:
journalctl -u 服务名 -n 50 --no-pager | grep -A2 -B1 "exited.*code=",找到非零退出码前后的上下文
区分手动重启与自动重启日志特征
systemd 日志中两类重启有明显区别:
- 手动执行
systemctl restart:日志含systemd[1]: Stopping ...→Started ...,且前一条常带用户信息(如user@xxx或root) - 自动重启触发:日志中会出现
systemd[1]: 服务名.service: Scheduled restart job,紧接着才是Stopping和Started - 若因崩溃触发,还会看到类似
service died, signal=9或exit code=exited, status=1/FAILURE的提示
持续跟踪重启行为并预警
对关键服务,建议建立轻量级监控逻辑:
- 实时监听重启事件:
journalctl -u 服务名 -f | grep -i "scheduled restart\|restarted\|exited.*status=" - 统计 5 分钟内重启次数(防雪崩):
journalctl -u 服务名 --since "5 minutes ago" | grep -c "Scheduled restart job" - 配合脚本做简单告警:当该计数 > 2 时发邮件或写入告警文件,避免人工盯屏

















