👨💻 systemd 启动不了?服务突然挂掉?日志一片混乱?
你可能只差一个命令:journalctl。
本篇文章,将带你彻底掌握 journalctl的实用技巧,从零基础入门到实战排错,帮你用好 systemd 的“显微镜”。
🔍 01. 为什么你必须掌握 journalctl?
journalctl是 systemd 的日志利器,它不同于传统的 tail -f /var/log/messages。它具备:
日志结构化存储:支持时间、服务、级别多维度过滤;
实时追踪服务状态:结合
systemctl快速定位问题根源;统一查看所有日志:替代 syslog、rsyslog 成为系统主力。
🧠 02. 基本用法:从入门到精通
贴士:加上 -xe参数可以高亮错误信息并显示上下文,极大提升排查效率。
-x参数:扩展日志信息(--catalog)
作用:为日志中的错误信息提供更详细的解释;
它会从 systemd 的日志目录中调用帮助信息,补充错误代码的背景说明;
类似于“翻译错误代码”的作用。
-e参数:跳转到日志结尾(end)
作用:直接跳转到日志的最后一行;
等同于
tail,适合快速查看最新日志。
⚠️ 03. 实战排错场景:别再被黑盒服务气疯!
🧯服务启动失败?
systemctl start myapp.service# 报错?看日志!journalctl -u myapp.service -b -n 100 -xe
快速定位错误,比如权限问题、依赖未启动、配置错误,一目了然。
-b参数:按“启动周期”查看日志
✅ 语法:
journalctl -b
journalctl -b
✅ 功能:
表示查看当前这次开机(boot)以来的所有日志。
🔁 常用变体:
-n参数:控制“显示的行数”
✅ 语法:
journalctl -n 50
journalctl -n 50
✅ 功能:
输出最新的 50 行日志(默认是 10 行)。
常见组合:
💥 服务莫名崩溃?
journalctl -u docker.service --since "10 minutes ago"
查查是不是系统 oom,磁盘爆满,还是某个核心 dump?你甚至可以用:
journalctl _PID=2345
直接看某个进程 ID 的日志轨迹。
在 journalctl中使用 _PID是一个非常实用的日志过滤字段,它的作用是:
👉 只查看某个进程 ID(PID)对应的日志内容。
_PID=是什么?
_PID是 systemd 日志中的一个内置字段(字段名带下划线);用于按进程 ID精确过滤日志,非常适合排查某个服务/进程的异常。
✅ 使用方式:
journalctl _PID=1234
表示:查看进程号为 1234 的所有日志记录。
🔍 应用场景举例:
1️⃣ 某服务挂掉了,想看它崩溃前的日志:
ps -ef | grep myapp# 找到 PID,比如是 4567journalctl _PID=4567 -n 50
2️⃣ nginx 主进程报错:
pidof nginx# 输出:1542journalctl _PID=1542 -xe
🧩 进阶用法:配合其他字段过滤
你可以把 _PID=和 -u或时间段结合使用:
journalctl _PID=4567 --since "2025-05-26 20:00"或者:journalctl _PID=4567 -n 100 -o short-iso
🛑 注意事项:
_PID只能查看 进程“运行期间”产生的日志;如果进程已重启,新的 PID 会变,旧日志要用
-b或--since限定时间查看;systemd 日志必须未被清理,才能回溯较久之前的 PID 记录。
✅ 总结:
🔐 涉密系统崩溃了怎么办?
在安全加固后的麒麟系统、UOS 或特定国产服务器环境中,日志往往被裁剪或重定向。你可以结合:
journalctl -k
查看内核相关信息,配合 auditd或 SELinux 审计日志分析拒绝服务原因。
当然!在 journalctl中,-k是一个非常重要的参数,专门用于查看内核日志(kernel logs)。
journalctl -k是什么?
-k是--dmesg的简写,表示:
👉 只显示内核产生的日志,类似于dmesg命令的效果,但功能更强。它可以查看例如:驱动加载、系统启动、设备识别、内核错误(如 OOM、挂载失败、硬件异常)等信息。
✅ 用法举例:
journalctl -k
表示:查看当前内核的所有日志信息,从系统启动开始。
journalctl -k -b -1
表示:查看上一次启动周期的内核日志,排查上次启动时是否有硬件或驱动异常。
journalctl -k -p err
表示:查看内核中优先级为错误(error)及以上的日志。
📌 常见内核日志内容包括:
启动过程中的内核识别信息(如 CPU、内存、硬盘等);
驱动加载与模块异常(如
i915、rtl8821ce等);内核警告(
kernel: WARNING:)、错误(kernel: ERROR:);系统崩溃、内核 panic、软中断问题;
内核级别的安全审计事件;
网络接口、文件系统挂载异常等。
🛠️ 实战示例:
查看所有内核相关的启动日志
journalctl -k -b
查看最近一次系统开机期间的硬件警告
journalctl -k -b -p warning
实时追踪内核日志(如插拔硬件)
journalctl -k -f
✅ 总结表:
🛡️ 04. 日志过大怎么办?用这些命令管理它
journalctl --disk-usage # 查看日志占用空间journalctl --vacuum-size=500M # 只保留 500MB 的日志journalctl --vacuum-time=2weeks # 只保留最近两周的日志
不要再让 /var被日志挤爆导致系统起不来了。
🎯 05. 总结:journalctl,是排错第一现场
一图总结:
systemctl start xxx↓journalctl -u xxx -xe↓根据日志修复、重启、验证
掌握
journalctl,你就掌握了 Linux 服务管理的核心“望远镜”。

