journalctl --since="24 hours ago"可精确获取最近24小时关机日志,比--since=yesterday更可靠;结合-u systemd-logind.service、-u systemd-shutdown.service及grep -e筛选关机消息,并可用-k查内核级异常原因。

journalctl --since=yesterday 并不能精确检索“过去24小时内”的关机日志,它实际表示从昨天同一时间点开始(即24小时前的整点时刻)到当前时间的日志,且默认按本地时区解释,容易产生偏差。要准确获取最近24小时内的关机记录,需结合时间范围、日志优先级和事件类型筛选。
以下是实用方法:
使用 --since="24 hours ago" 精确限定时间窗口
该语法由 systemd 解析,支持自然语言,比 yesterday 更可靠:
journalctl --since="24 hours ago" | grep -i "shut\|power\|halt\|reboot"
-
--since="24 hours ago"是动态计算的,始终指向当前时间往前推24小时(如现在是 15:30,则从昨天 15:30 开始)。 -
grep -i忽略大小写,匹配常见关机/重启关键词:shutdown、poweroff、halt、reboot、systemd-shutdown等。
直接过滤关机相关 unit 和 message
更精准的方式是限定服务单元和日志字段:
journalctl --since="24 hours ago" \ -u systemd-logind.service \ -u systemd-shutdown.service \ -o short-iso | grep -E "(Session|Shutting down|Powering off|Stopped)"
-
-u指定关键服务单元,systemd-logind记录用户会话结束(含图形界面关机),systemd-shutdown处理内核级关机流程。 -
-o short-iso输出带 ISO 时间戳,便于确认时间范围。 -
grep -E匹配典型关机消息片段。
补充:查看内核关机原因(如 panic、unexpected power loss)
如果怀疑非正常关机,可追加内核日志筛选:
journalctl --since="24 hours ago" -k | grep -i "panic\|oops\|reset\|power.*fail"
-
-k只显示 kernel 日志,适合排查硬件掉电、内核崩溃等底层问题。
小提示
- 关机日志不一定都标记为“shutdown”:部分系统用
Stopping User Manager for UID xxx或Reached target Shutdown表示关机流程启动。 - 若日志被轮转或
Storage=volatile,可能无法查到旧记录;可用journalctl --disk-usage检查是否启用持久存储。
不复杂但容易忽略时间语义差异,用 "24 hours ago" 替代 yesterday 是关键。











