实战

journalctl                              # 看当前 boot 所有日志
journalctl -f                           # 实时跟踪(类似 tail -f)
journalctl -u nginx                     # 看某服务
journalctl -u nginx -f                  # 服务实时

按时间

journalctl --since "10 minutes ago"
journalctl --since "2026-05-09 10:00"
journalctl --since today
journalctl --since yesterday --until "1 hour ago"
journalctl --since "2 hours ago" --until now

按服务

journalctl -u nginx
journalctl -u nginx -u mariadb         # 多个服务
journalctl _SYSTEMD_UNIT=nginx.service

按优先级

journalctl -p err                       # 仅 error 及以上
journalctl -p warning..err              # 范围

级别(数字小 = 严重):

0 emerg    1 alert    2 crit    3 err
4 warning  5 notice   6 info    7 debug

按 PID / UID

journalctl _PID=1234
journalctl _UID=1000

按 boot

journalctl --list-boots                 # 看历次开机
journalctl -b 0                          # 当前 boot
journalctl -b -1                         # 上次 boot
journalctl -b -2                         # 上上次
journalctl -k                            # 内核日志(含所有 boot)
journalctl -k -b 0                       # 当前 boot 的内核

输出格式

journalctl -n 50                        # 最后 50 行
journalctl -r                            # 倒序(最新在上)
journalctl -o short                      # 简短(默认)
journalctl -o cat                        # 仅消息(无元信息)
journalctl -o json                       # JSON
journalctl -o json-pretty                # 美化 JSON
journalctl --no-pager                    # 直接打印(不分页)

实战:故障排查

# 服务起不来
sudo journalctl -u myapp --since "10 minutes ago" -p err

# 看完整堆栈
sudo journalctl -u myapp -b -n 100 --no-pager

# 看哪个服务占用 journal 最多
sudo journalctl --disk-usage
sudo journalctl --vacuum-size=500M       # 限制 journal 占 500M
sudo journalctl --vacuum-time=7d         # 只保留 7 天

journal 文件管理

sudo journalctl --disk-usage
# Archived and active journals take up 234.5M in the file system.

# 清理旧的
sudo journalctl --vacuum-time=7d         # 删 7 天前的
sudo journalctl --vacuum-size=100M       # 总大小限 100M

或编辑 /etc/systemd/journald.conf:

SystemMaxUse=500M
MaxRetentionSec=1month

  • journalctl 默认要 sudo 才看完整——普通用户只看到自己的
  • journal 默认存内存(部分发行版)—— 重启后丢失。改成持久:
    sudo mkdir -p /var/log/journal
    sudo systemctl restart systemd-journald
    
  • 大量日志时查询慢——加 --since 等过滤条件