journalctl -u 不支持直接按时间段检索服务状态,但可通过 --since 和 --until 精准筛选日志,结合 grep 提取 Started、Failed 等状态行,并需启用持久化存储以保障日志可用性。
journalctl -u
本身不直接支持“按时间段检索服务运行状态”,但可以结合时间参数精准筛选指定服务在某段时间内的日志(含启动、停止、崩溃、重载等状态变化)。关键在于用对时间选项和单位,并理解 systemd 日志中“状态”的体现方式(如
、
、
、
等)。
用 --since 和 --until 定义时间段
这是最常用、最可靠的方式。时间格式灵活,支持自然语言和 ISO 格式:
(查最近2小时)
快速定位服务启停与异常状态行
日志里真正反映“运行状态”的通常是 unit 的单元事件,不是普通应用输出。可配合
提炼关键状态动词:
加
让时间更易读:
查看服务最近一次启动/失败的完整上下文
有时只需看最后一次状态变更,可用
+
+
快速回溯:
CentOS Linux 7.9.2009
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
下载
(倒序取50行,匹配后带前后文)
(查最近一小时末尾20行,常含最新状态)
注意持久化与时间精度问题
默认 journal 日志可能未持久保存,重启后旧日志丢失。确保已启用持久存储:
运行
确认
中有
(取消注释并重启 journald:
)
时间精度默认为秒级,无法精确到毫秒;若需高精度排查,建议搭配服务自身日志(如
)交叉验证
不复杂但容易忽略:时间参数必须写在
后面,且
和
是独立开关,不能合并缩写(比如不能写成
或
带等号反而可能报错,推荐空格分隔)。
StartedStoppedStartingFailedjournalctl -u nginx --since "2024-05-20 09:00:00" --until "2024-05-20 17:30:00"journalctl -u sshd --since "2 hours ago"journalctl -u docker --since "yesterday" --until "today"journalctl -u mysql --since "2024-05-15" --until "2024-05-16 08:00"grepjournalctl -u postfix --since "1 day ago" | grep -E "(Started|Starting|Stopped|Stopping|Failed|Reload)"journalctl -u apache2 --since "30 minutes ago" -n 100 --no-pager | grep -i "state\|fail\|exit\|start\|stop"-o short-isojournalctl -u redis -o short-iso --since "2024-05-20"--unit--reverse-njournalctl -u cron --reverse -n 50 | grep -A 3 -B 1 -i "started\|failed\|exited"journalctl -u fail2ban --since "1 hour ago" --no-pager | tail -n 20sudo mkdir -p /var/log/journal/etc/systemd/journald.confStorage=persistentsudo systemctl restart systemd-journald/var/log/nginx/error.log-u--since--until-S--since=...