Linux 日志排查:用 journalctl 快速定位服务故障

举报
yd_244110823 发表于 2026/11/04 06:07:02 2026/11/04
【摘要】 Linux 日志排查:用 journalctl 快速定位服务故障服务突然起不来、网站间歇性 502、定时任务悄悄失败——Linux 服务器出问题时,第一反应不应该是重启碰运气,而是先看日志。日志里写着故障发生的时间、报错的服务和具体的错误原因,读懂它,排查就完成了一大半。systemd 时代的 journalctl 正是为此而生的工具:它统一收集系统和服务的日志,支持按时间、按服务、按级别...

Linux 日志排查:用 journalctl 快速定位服务故障

服务突然起不来、网站间歇性 502、定时任务悄悄失败——Linux 服务器出问题时,第一反应不应该是重启碰运气,而是先看日志。日志里写着故障发生的时间、报错的服务和具体的错误原因,读懂它,排查就完成了一大半。systemd 时代的 journalctl 正是为此而生的工具:它统一收集系统和服务的日志,支持按时间、按服务、按级别过滤,比翻 /var/log 下一堆零散文件高效得多。

先看最近发生了什么

最常用的起手式是看某个服务的最新日志:

journalctl -u nginx -n 100 --no-pager

-u 指定服务名,-n 100 只看最后 100 行,--no-pager 让输出直接打印而不是进入翻页器,方便复制和搜索。如果服务刚刚崩过,加上 -b 只看本次启动以来的日志,排除掉上次启动的旧记录干扰:

journalctl -u nginx -b -p err --no-pager

-p err 只显示错误及以上级别,噪音一下子少了很多。先看错误级别,再放宽到警告级别,是排查时省时间的顺序。

按时间圈定故障窗口

用户说“今天早上 9 点左右网站打不开”,日志排查就应该从时间入手,而不是从头翻到尾:

journalctl --since "2026-11-04 08:30" --until "2026-11-04 09:30" -p warning --no-pager

--since 和 --until 支持“yesterday”“-1 hour”这类相对写法,比如 --since "-1 hour" 就是最近一小时。把时间窗口收窄到故障前后半小时,往往几十行日志里就有答案。配合 -f 还能实时跟踪新日志,相当于给服务接上“心电图”:

journalctl -u myapp -f

服务重启后立刻跑这条命令,报错会一行行实时冒出来,复现问题时特别好用。

三个常见故障的日志读法

第一种是端口被占用。服务启动失败,日志里常出现“Address already in use”。这时用 ss -tlnp 查一下到底是谁占了端口,再决定是停掉旧进程还是改新服务的端口,不要反复重启同一个服务。

第二种是磁盘满了。日志里出现“No space left on device”时,先用 df -h 确认哪个分区满了,再用 du -sh /var/log/* 之类定位大文件。日志本身失控增长也是常见元凶,清理前先看清楚是哪个服务在刷屏,修好刷日志的根因比删文件更重要。

第三种是权限问题。日志里出现“Permission denied”时,先确认服务是以哪个用户运行的,再检查文件和目录的属主与权限。把权限改成 777 虽然能立刻“修好”,却是给服务器留了个大口子,正确做法是只给运行用户必要的读写权限。

养成排查习惯

排查时还有两点值得养成习惯。一是先看日志再动手改配置,改完配置重启服务后,立刻用 journalctl 确认新日志里没有新的报错,才算一次完整的修复。二是重要服务配上日志轮转和磁盘告警,避免日志把磁盘写满反过来拖垮服务——很多“半夜宕机”的根因,最后查下来都是磁盘被日志塞满了。

日志不会说谎,但它只对愿意读它的人有用。下次服务出问题,别急着重启,先花五分钟跑几条 journalctl,把故障时间、报错服务和错误信息圈出来,定位速度会快得多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。