排查重启要靠时间线
排查「什么时候重启的、为什么重启」,核心是把三条信息拼成一条时间线:启动时间(who -b)、每次启动的区间(journalctl --list-boots)、上一次启动周期末尾的日志(journalctl -b -1)。如果末尾日志里有完整的 systemd 关机流程,就是正常重启;如果日志在某个时间点直接断掉、紧接着就是新启动,则更像断电或硬件复位。
基本信息
| 启动时间 | who -b、uptime -s |
|---|---|
| 重启与关机历史 | last -x reboot shutdown |
| 启动区间 | journalctl --list-boots |
| 上次关机日志 | journalctl -b -1 |
| 权限要求 | 普通用户可查部分信息,完整日志需 root 或 systemd-journal 组 |
典型使用场景
- 业务中断后确认机器的实际重启时间与原因
- 排查重启导致配置被还原的变更时间点
- 配合带外管理(IPMI/BMC)日志判断是否断电复位
- 核查是否存在无人知情的重启
- 审计前统一校准时区,避免时间线整体偏移
查证命令
查证命令
who -b # 上次启动时间
uptime -s # 开机时刻,脚本友好格式
last -x reboot shutdown | head -10 # 重启与关机历史记录
journalctl --list-boots | tail -5 # 各次启动区间
journalctl -b -1 --no-pager | tail -30 # 上一次启动周期末尾的日志
timedatectl # 确认时区,避免时间线偏移
grep -i storage /etc/systemd/journald.conf # journal 是否持久化
# 与变更记录、平台事件、带外管理日志交叉核对重启类型判读
| 类型 | 日志特征 | 后续动作 |
|---|---|---|
| 正常重启 | 含 systemd 关机与停止单元记录 | 核对是谁执行了重启 |
| 断电或复位 | 无关机记录,日志断点后接新启动 | 查带外管理与机房供电记录 |
| 内核崩溃 | 结合 kdump 转储或看门狗记录 | 分析转储或查硬件告警 |
| 历史记录缺失 | journal 未持久化 | 先开启持久化再谈回溯 |
journal 未持久化时,重启前的日志会随内存一起消失:需要回溯历史的机器要先把日志持久化配置好,否则排查从一开始就缺材料。
排查前先核对时区与时钟同步:时间线整体偏移会让系统日志、平台事件与人工记录对不上,结论很容易做错。