journalctl -u nginx -n 100 --no-pager排查服务失败最常用。
约 1590 字大约 5 分钟
2026-05-14
journalctl 用来查看 systemd journal 日志。它可以按服务、时间、启动轮次、优先级过滤日志,是排查 Linux 服务启动失败、异常退出和系统错误时最常用的工具之一。
journalctl 用来查看 systemd journal 日志。它可以按服务、时间、启动轮次、优先级过滤日志,是排查服务和系统错误的常用入口。
journalctl -u nginx -n 100 --no-pager排查服务失败最常用。
journalctl -u nginx -f观察重启或请求过程中的新日志。
journalctl -p err -b只看当前启动轮次中的错误日志。
journalctl --since "1 hour ago"查看最近一小时系统日志。
journalctl --disk-usage确认 journal 日志占了多少磁盘。
systemd 会把系统服务、内核、启动过程等日志统一写入 journal。journalctl 就是读取这些日志的命令。
它和传统日志文件的关系可以这样理解:
| 日志来源 | 常见位置或命令 | 特点 |
|---|---|---|
| systemd journal | journalctl | 统一、可按服务/时间/级别过滤 |
| 应用自己的日志 | /var/log/app.log | 格式由应用决定 |
| 系统传统日志 | /var/log/syslog、/var/log/messages | 不同发行版差异较大 |
| 内核日志 | journalctl -k、dmesg | 硬件、驱动、内核事件 |
并不是所有应用日志都会进入 journal。如果服务把日志写到单独文件,journalctl -u 里可能只能看到启动和退出信息。
journalctl -u nginx
journalctl -u nginx -n 100
journalctl -u nginx -n 100 --no-pager
journalctl -u nginx -f常用选项:
| 选项 | 作用 |
|---|---|
-u nginx | 只看 nginx 这个 unit 的日志 |
-n 100 | 只看最近 100 行 |
--no-pager | 不进入分页器,适合复制或脚本使用 |
-f | 类似 tail -f,实时跟踪新日志 |
排查服务失败时,最常用的是:
journalctl -u 服务名 -n 100 --no-pager如果你正在重启服务,可以开一个窗口实时观察:
journalctl -u 服务名 -fjournalctl --since today
journalctl --since "2026-05-14 10:00:00"
journalctl --since "1 hour ago"
journalctl --since "30 min ago" --until now
journalctl -u nginx --since today时间过滤适合回答这类问题:
先缩小时间,再看细节
日志很多时,不要从头翻。先用 --since、--until 把范围缩小,再加 -u、-p 过滤。
journalctl -b
journalctl -b -1
journalctl --list-boots
journalctl -u nginx -b| 写法 | 含义 |
|---|---|
-b | 当前这次系统启动后的日志 |
-b -1 | 上一次启动的日志 |
--list-boots | 列出可查询的启动轮次 |
如果机器刚刚重启过,journalctl -b -1 很有用。它可以看到上一次启动结束前发生了什么,例如 OOM、内核错误、服务崩溃等。
journalctl -p err
journalctl -p warning..err
journalctl -p err -b
journalctl -u nginx -p warning --since today常见级别从严重到普通大致是:
| 级别 | 含义 |
|---|---|
emerg | 系统不可用 |
alert | 必须立即处理 |
crit | 严重错误 |
err | 错误 |
warning | 警告 |
notice | 普通但值得注意 |
info | 信息 |
debug | 调试信息 |
排查时可以先看错误:
journalctl -p err -b --no-pager如果错误太少,再放宽到 warning。
journalctl -k
journalctl -k -b
journalctl -b -p warning这些命令适合排查:
如果只是应用报错,优先 journalctl -u 服务名;如果整个系统异常、机器重启或硬件相关,再看 -k 和 -b。
journalctl -u nginx -o short-iso
journalctl -u nginx -o cat
journalctl -u nginx -o json-pretty| 格式 | 用途 |
|---|---|
short-iso | 时间更清楚,适合人工阅读 |
cat | 只输出日志正文,适合管道处理 |
json-pretty | 保留结构化字段,适合调试 |
例如只想搜索正文:
journalctl -u nginx -o cat --since today | grep "connect failed"journalctl --disk-usage
sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-size=1G| 命令 | 含义 |
|---|---|
--disk-usage | 查看 journal 日志占用空间 |
--vacuum-time=7d | 只保留最近 7 天日志 |
--vacuum-size=1G | 清理到总占用不超过 1G |
清理前先确认排障需求
日志清理后无法恢复。线上问题尚未定位时,不要急着 vacuum;可以先导出关键日志再清理。
先看服务状态,确认服务名和错误摘要:
systemctl status 服务名 --no-pager看当前启动轮次的服务日志:
journalctl -u 服务名 -b -n 100 --no-pager如果刚复现问题,实时跟踪:
journalctl -u 服务名 -f如果怀疑是系统级问题,看本次启动错误:
journalctl -p err -b --no-pager如果机器重启过,看上一次启动尾部日志:
journalctl -b -1 -n 200 --no-pager| 现象 | 可能原因 | 下一步 |
|---|---|---|
journalctl -u 看不到业务日志 | 应用写到了独立日志文件 | 检查应用配置和 /var/log |
| 日志时间对不上 | 系统时区或时间不同步 | timedatectl、NTP 配置 |
| 日志太多翻不动 | 没有限定范围 | 加 -u、--since、-p、-n |
| 没有上一次启动日志 | journal 未持久化或已清理 | 检查 /var/log/journal 和 journald 配置 |
| 日志占满磁盘 | 保留策略不合理 | --disk-usage 后再设置清理策略 |
版权归属:Shuo Liu