用 journalctl 快速定位 Linux 服务起不来的原因
用 journalctl 快速定位 Linux 服务起不来的原因
服务突然起不来,先别急着重装或重启整台机器。systemd 的日志都在 journal 里,用 journalctl 按服务名筛一遍,往往几分钟就能找到根因。
第一步先看服务状态:systemctl status nginx --no-pager -l。这里能看到它是不是 active、最近一次退出的退出码,以及最后几行日志。如果状态是 failed,记住失败时间,再去翻对应时间段的完整日志。
第二步查本服务的日志:journalctl -u nginx --since "2026-10-27 09:00" --no-pager。只看一个服务、不加时间范围时,日志可能翻不到头;加上 --since 限定到故障前后,效率高很多。想实时跟进就用 journalctl -u nginx -f,改完配置重启服务,日志会立刻滚动出来。
第三步按级别过滤:journalctl -u nginx -p err --since today 只看错误及以上级别,能快速跳过大量 info 噪音。如果怀疑是启动顺序问题,加上 -o short-precise 看带毫秒的时间戳,对照依赖服务的启动时间。
常见根因有三类。一是端口被占:日志里出现 address already in use,用 ss -tlnp | grep 80 找到占用进程,先停掉冲突服务再重启。二是配置文件写错:nginx 会报 test failed 并指出行号,先 nginx -t 校验,通过后再 reload,不要直接 restart 掩盖问题。三是权限或路径问题:Permission denied 多半是目录属主不对或 SELinux/AppArmor 拦截,检查属主和 ls -ld 路径权限,别一上来就 chmod 777。
还有一个容易忽略的点:磁盘满了也会让服务起不来。df -h 看一眼根分区,日志写不进去时 journal 本身也会报错。先清掉过期日志 journalctl --vacuum-size=500M 腾出空间,再回头处理服务。
养成习惯:每次改配置前先备份原文件,改完先 systemctl reload,reload 不生效再 restart;每次故障先 status 再 journalctl -u,按时间、按级别筛,别在大海捞针式翻全量日志里浪费时间。
- 点赞
- 收藏
- 关注作者
评论(0)