Linux journalctl日志查看

服务突然崩溃时,最怕的是只看到一句“启动失败”却不知道从哪查。
journalctl 按服务和启动周期拉取日志,通常几分钟内就能把崩溃点定位到具体报错行。
下面按零基础也能照做的顺序讲清楚。

先确认日志系统是否可用

journalctl 依赖 systemd-journald,现代主流发行版默认都有。
先执行下面两条命令确认环境正常:

systemctl status systemd-journald
journalctl --disk-usage

第一条应显示 active (running)
第二条会输出日志占用空间,例如 Archived and active journals take up 100M
如果提示 command not found,说明系统未使用 systemd,需要改用 /var/log/ 下的传统日志文件。

如果日志占用过大或提示空间不足,可以先清理旧日志,但不要一上来就删:

sudo journalctl --vacuum-size=200M

结论:日志系统正常且磁盘有空间,是后续排查的前提。

按服务和时间缩小崩溃范围

直接 journalctl 输出太多,排查时要用过滤器。
假设崩溃的服务名是 nginx.service

journalctl -u nginx.service -b --no-pager

参数含义:

  • -u 指定服务单元,只看这个服务的日志。
  • -b 只看本次开机后的记录,避免翻到历史启动。
  • --no-pager 一次性输出,方便复制和搜索。

如果服务反复重启,用 -n 看最近几行更快:

journalctl -u nginx.service -n 50 --no-pager

判断条件:
如果日志末尾出现 Failed with result 'exit-code'Main process exitedsegfault 等字样,
崩溃点基本就在这几行附近。

抓住关键报错行

日志里真正有用的往往只有几行。
重点看这些信号:

  • Permission denied:通常是文件权限或运行用户不对。
  • Address already in use:端口被占用,服务起不来。
  • No such file or directory:配置或依赖文件路径写错。
  • Out of memorykilled:进程被系统因内存不足终止。
  • signal 后跟数字:例如 signal=11 多为段错误,signal=9 多为被强制杀死。

把报错时间点和系统其他日志对照,能排除是不是外部因素:

journalctl --since "2024-01-01 10:00:00" --until "2024-01-01 10:10:00" --no-pager

结论:先按服务过滤,再按时间窗口对照,能快速区分是服务自身问题还是系统级问题。

常见坑位和对应处理

  • 只看 systemctl status 不看 journal。status 往往只给一句摘要,详细堆栈在 journal 里。
  • 忘记 -b,翻到上次开机的旧日志,误判成新问题。
  • 日志被轮转清理,查不到崩溃时刻。可提前在 /etc/systemd/journald.conf 中设置 Storage=persistent 并合理限制 SystemMaxUse
  • 服务配置改了但没 daemon-reload,日志里仍显示旧参数。改完 unit 文件后执行 sudo systemctl daemon-reload
  • 权限不足导致日志缺失。普通用户可能看不到完整日志,排查时用 sudo journalctl

避坑要点:改配置后先 daemon-reload,再重启服务,否则日志和实际行为对不上。

修复后如何验证

改完问题后,重启服务并观察新日志:

sudo systemctl restart nginx.service
journalctl -u nginx.service -f

-f 会持续跟踪输出,按 Ctrl+C 退出。
看到 Started 且没有新的报错行,说明服务已正常拉起。

再确认一次状态和监听端口:

systemctl status nginx.service
ss -tlnp | grep nginx

验证标准:服务状态为 active (running),端口正常监听,且跟踪日志 1 到 2 分钟内没有重复报错。

几个常见疑问

日志里出现 Failed to start 但没有任何细节怎么办?
先加 -b -n 100 看完整尾部,再检查是否被 Rate limit 截断。

服务崩溃但 journal 里没有记录?
确认 systemd-journald 正在运行,并检查 /etc/systemd/journald.conf 是否禁用了持久化存储。

怎么只看某个时间点之后的错误级别日志?
可以用 journalctl -p err -b --no-pager-p 按优先级过滤,err 及以上级别会显示。

掌握 journalctl -u-b-n-f 这几个参数后,大多数服务崩溃都能在日志里找到直接线索。
遇到异常时,先回看避坑部分,再按验证步骤复查一遍。

分享到:
上一篇
Linux screen后台运行任务
下一篇
Ubuntu宝塔面板安装,一键建站环境部署
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意