为什么会有两套日志
- /var/log/*(rsyslog)
- 传统方式,纯文本文件。
cat、grep、tail都能直接用。Day 03 学的那套。 - journal(systemd)
- 二进制格式,必须用
journalctl读。好处是带结构——能按服务、按时间、按优先级精确过滤,不用自己写 grep。 - 两者关系
- 大部分系统上两套同时在跑,同一条日志两边都有。但服务启动失败的详细原因,往往只有 journal 里最全。
五条命令
$ sudo journalctl -u nginx # 只看某个服务
$ sudo journalctl -u nginx -f # 实时跟踪(等于 tail -f)
$ sudo journalctl -u nginx --since "10 min ago"
$ sudo journalctl -p err -b # 本次开机以来的错误
$ sudo journalctl -xe # ← 服务起不来时看这个
-xe 要背下来
只要 systemctl start 失败,系统提示里就会让你看它:
$ sudo systemctl start nginx
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xe" for details.
↑ 它直接告诉你去哪看
- -e
- end——直接跳到最新的日志末尾。你关心的永远是刚发生的事。
- -x
- explain——附上解释性说明,告诉你这条日志是什么含义、可能该怎么处理。
journalctl -xe 里的报错,九成能归到这三种:① 配置文件语法错 ② 端口被占用 ③ 权限或 SELinux 不让访问某个文件。
明天的实战课,你会亲手制造第一种并修好它。
按时间过滤
$ sudo journalctl --since "10 min ago"
$ sudo journalctl --since today
$ sudo journalctl --since "2026-09-07 09:00" --until "2026-09-07 10:00"
$ sudo journalctl -b # 本次开机以来
$ sudo journalctl -b -1 # 上一次开机的日志 ← 查崩溃原因用这个
-b -1 是查宕机的利器服务器莫名重启了,想知道它挂之前发生了什么——journalctl -b -1 -p err 直接看上一次开机期间的错误日志。
传统日志翻这个要按时间戳找半天,journal 一个参数搞定。
按严重程度过滤
$ sudo journalctl -p err # 只看 error 及以上
$ sudo journalctl -p warning # warning 及以上
# 级别从严重到轻微:
emerg(0) alert(1) crit(2) err(3) warning(4) notice(5) info(6) debug(7)
巡检时用 journalctl -p err -b --no-pager | tail -30——一眼扫完本次开机以来的所有错误。这条第 28 天写巡检脚本会用到。
组合起来用
# 1. nginx 刚才为什么起不来
$ sudo journalctl -u nginx -n 50 --no-pager
# 2. 最近 5 分钟有没有报错
$ sudo journalctl -p err --since "5 min ago"
# 3. 边操作边看(Day 03 的两窗口姿势,换成 journal 版)
$ sudo journalctl -u nginx -f
# 4. 谁在 SSH 爆破(journal 版)
$ sudo journalctl -u sshd | grep "Failed password" | tail
journalctl 默认用分页器(像 less),要按 q 退出。写进脚本时必须加 --no-pager,否则脚本会卡在那等你按键。
日志会不会撑爆磁盘
$ journalctl --disk-usage
Archived and active journals take up 208.0M in the file system.
$ sudo journalctl --vacuum-time=7d # 只保留 7 天
$ sudo journalctl --vacuum-size=200M # 只保留 200M
journal 默认有上限(一般是磁盘的 10%),不会无限涨。但磁盘紧张时,--vacuum-time 是个能立刻腾出空间的手段——第 21 天讲磁盘满了怎么办时,这是可选招数之一。
今天的面试点
「systemctl status 先看概况——它会带出最近几行日志;然后 journalctl -xe 看详细报错。」
「一般能直接定位到三类原因:配置语法错、端口被占、权限或 SELinux 问题。」
能说出这三类,说明你真修过服务。
「journalctl -b -1 -p err,看上一次开机期间的错误日志,重点看最后那段——正常关机和异常宕机在日志里长得不一样。」
今天的练习
sudo journalctl -u nginx -n 30 --no-pager,看昨天启动 nginx 的记录sudo journalctl -p err -b --no-pager | tail -20,看看你这台机器开机以来有没有报错sudo journalctl --since "1 hour ago" --no-pager | tail -20,练时间过滤- 两窗口练习:A 窗口
sudo journalctl -u nginx -f,B 窗口sudo systemctl restart nginx,看 A 窗口实时滚出来 journalctl --disk-usage,看日志占了多少空间sudo journalctl -b -1 --no-pager | tail -20(如果这台机器重启过),看上一次开机的日志
Day 14:自己把 nginx 配置改坏,再靠日志修回来。
这是整个 30 天里最有价值的一天——把 Day 03、12、13 学的东西串成一次真实的排障。走通这一次,你就真的会排障了。