要看到系统崩溃前的最后日志,不能只运行 journalctl -b -1 就完事——它只是上一次启动的全部日志,不标注哪一行是“崩溃点”。关键在于验证日志是否真实保留、识别非正常关机痕迹、聚焦内核异常,并用辅助缓冲区补漏。

要看到系统崩溃前的最后日志,不能只运行 journalctl -b -1 就完事——它只是上一次启动的全部日志,不标注哪一行是“崩溃点”。关键在于验证日志是否真实保留、识别非正常关机痕迹、聚焦内核异常,并用辅助缓冲区补漏。
确认日志是否真的存到了磁盘
默认情况下,systemd-journald 把日志写在内存(/run/log/journal/),一断电或内核 panic,就全没了。所以第一步必须检查持久化是否生效:
- 运行
journalctl --disk-usage:如果显示0B或No journal files were found,说明日志没落盘,-b -1很可能为空或不可靠 - 执行
ls /var/log/journal/:应看到一个以机器 ID 命名的子目录;若没有,需手动启用:sudo mkdir -p /var/log/journalsudo systemctl restart systemd-journald - 检查配置:
sudo nano /etc/systemd/journald.conf,确保Storage=persistent已取消注释,保存后重启服务
判断是不是非正常关机(崩溃/硬重启)
系统崩溃最直接的表现,是缺少正常关机流程的日志信号:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 运行
journalctl -b -1 | grep "Reached target.*final":正常关机应出现Reached target Final Step;若无此行,大概率是非正常终止 - 倒序查看末尾行为:
journalctl -b -1 -n 100 -r:观察最后几十行是否突然中断,有无Shutting down、Stopping等过渡日志 - 对比
last -x输出:连续两个reboot行,或有reboot但无对应shutdown行,也指向崩溃
重点排查内核级崩溃线索
多数硬崩溃源于内核问题,这类信息集中在内核日志中,且常出现在日志末尾附近:
- 只看内核消息并倒序:
journalctl -b -1 -k -r:快速扫视顶部(即崩溃前最后时刻),重点找Kernel panic、Oops、WARNING、Call Trace、Hardware Error - 搜索高危关键词:
journalctl -b -1 -k | grep -i -E "(panic|oops|nmi|watchdog|machine check|EDAC|mce)" - 补充检查 dmesg 缓冲区:
dmesg -T | tail -n 30:内核环形缓冲区有时保留 journal 中没有的 panic 信息,尤其在未启用持久化时更关键
留意 systemd 层面的异常退出
即使内核没 panic,systemd 自身异常也可能导致静默重启或卡死:
- 查 systemd-shutdown 相关错误:
journalctl -b -1 | grep -E "(Failed|Dependency failed|Timed out|killed|aborted|systemd-shutdown)" - 关注 kernel 模块加载失败、unit 启动超时、依赖循环等日志,它们可能是崩溃前的铺垫性异常

















