journalctl - systemd 日志查询与清理

systemd-journald 收集并存储系统日志,包括内核、启动过程、系统服务及应用程序产生的日志。journalctl 用于查询这些日志。

基本语法

journalctl [OPTIONS...] [MATCHES...]

默认按时间顺序显示可读取的日志,从较早记录到最新记录。

常用参数

参数描述
-n显示最近若干行
-r反向输出,从最新记录开始
-p按日志优先级过滤
-f持续显示新日志,类似 tail -f
-o指定输出格式,如 shortjsonjson-prettycat
--since--until设置查询的开始与结束时间
-u UNIT只显示指定 systemd 单元的日志
_COMM=bash按命令名称过滤
_PID=PID按进程 ID 过滤
_UID=UID按用户 ID 过滤

查询示例

# 显示昨天以来的日志
journalctl --since yesterday
 
# 查询指定相对时间范围
journalctl --since 9:00 --until "1 hour ago"
 
# 查询指定时间范围
journalctl --since "2022-01-16 09:00:00" --until "2022-01-16 10:00:00"
 
# 只看 err 及更高优先级的日志
journalctl -p err
 
# 只看指定服务的日志
journalctl -u ntpd
 
# 持续查看指定服务的新日志
journalctl -u ntpd -f

查看与清理磁盘占用

先查看日志当前占用的磁盘空间:

journalctl --disk-usage

确认需要清理后,可以先轮转当前活动日志,再删除超过保留期限或大小限制的归档日志:

# 只保留最近 4 周的归档日志
sudo journalctl --rotate --vacuum-time=4weeks
 
# 将归档日志占用限制在约 500 MB
sudo journalctl --rotate --vacuum-size=500M

--vacuum-* 会删除最旧的归档日志文件。执行前应确认审计、故障排查和合规要求,避免清除仍需保留的记录。

参考资料