journalctl -b 是查看本次启动日志的唯一可靠方式,它能完整覆盖从内核加载到用户空间服务就绪的全过程,而 /var/log/messages 等传统日志在现代 systemd 系统中常为空或缺失关键信息。

Linux怎么查看系统启动日志

journalctl -b 是查看本次启动日志的唯一可靠方式

直接读取 /var/log/messages 或使用 tail /var/log/boot.log 命令,在现代的systemd系统中,很可能会遗漏关键信息。原因在于,许多服务(比如 sshd.servicedbus.service)仅向journald发送日志,而不会写入磁盘。只有通过 journalctl -b 命令,才能获取到从内核加载到用户空间服务就绪的完整链路信息。

常见错误现象:journalctl 报错 No journal files were found,说明 journald 没启用持久化,重启后日志已丢;此时 journalctl --list-boots 会返回空。

dmesg 是诊断硬件/驱动问题不可替代的入口

dmesg 输出的是内核环形缓冲区原始内容,不受 systemd 是否崩溃影响,尤其适合查显卡初始化失败、USB 设备未识别、内存映射冲突等底层问题。

容易踩的坑:默认输出不含时间戳,且滚动太快;dmesg | less 无法高亮搜索,dmesg -T 加了时间但可能因系统时钟未同步导致时间错乱。

别忽略 /var/log/ 下的 boot.log 和 messages(仅限特定场景)

CentOS 7、RHEL 7以及部分禁用了journald的嵌入式系统,依旧依赖传统的日志落盘方式。在这种情况下,/var/log/boot.log会记录init进程拉起服务的顺序,/var/log/messages则包含早期systemd单元启动的摘要信息。不过,这些文件在Ubuntu 22.04+或Fedora 38+上基本为空,或者仅存有备份。

使用前提:确认 rsyslog 或 syslog-ng 正在运行(systemctl is-active rsyslog),且配置中明确启用了 boot 相关日志写入。

按服务查启动失败原因必须带 .service 后缀

查某个服务是否启动成功,不能只写 journalctl -u nginx,必须写 journalctl -u nginx.service,否则报 No journal files were found。这是 unit 名称规范,不是可选项。

另一个常见盲区:有些服务由 socket 激活(如 sshd.socket),但连接处理日志实际记在 sshd.service 里;查 socket 单元只能看到监听端口行为,看不到认证失败细节。

真实排查中,journalctl -bdmesg 必须一起看——前者告诉你“哪个服务没起来”,后者告诉你“为什么起不来”。/var/log/ 下的文件只是辅助验证,不是主路径。
本文转载于:https://www.php.cn/faq/3013742.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。