journalctl 是系统更新后排查服务启动失败的核心工具,通过时间(--since/--until/-b)、服务(-u)、优先级(-p)三锚点精准切片日志,结合 _COMM、_UID 等字段交叉验证配置、二进制、权限变更引发的兼容性问题。
系统更新后服务无法启动,核心是日志里藏着“不兼容”的蛛丝马迹。journalctl 不是翻日志,而是用时间、服务、级别三个锚点,把更新前后的关键行为切出来比对。
更新时间就是故障起点。别猜,直接用 --since 定位:
journalctl --since "30 min ago"
journalctl --since "2026-07-07 10:15:00" --until "2026-07-07 10:25:00"
-b 看本次启动全程:journalctl -b;想对比重启前后,加 -b -1 看上一次启动日志更新常导致单个服务崩,必须按服务单元过滤,且后缀不能省:
journalctl -u nginx.service -b
journalctl -u docker.service --since "30 min ago" | grep -i "failed|error|permission"
systemctl list-unit-files | grep your-service 确认注册名(比如是 mysql.service 还是 mariadb.service)更新引发的问题往往藏在 err 和 warning 级别里,info 和 debug 反而干扰判断:
journalctl -u php-fpm.service -p err -b
journalctl -u httpd.service -p warning --since "1 hour ago"
光看服务日志不够,得结合上下文还原现场:
journalctl _COMM=mysqld --since "20 min ago"
journalctl _UID=999 --since "1 hour ago"(替换为对应服务运行 UID)journalctl -u nginx.service -b --output=json > nginx-boot.json,方便用 jq 或脚本筛字段