journalctl按服务、时间查询和导出日志

journalctl用于读取systemd journal。排查时先明确服务名、发生时间和时区,再缩小输出;直接复制整个系统日志容易泄露信息,也让有效错误被淹没。以下命令以读取和导出为主,不包含清理日志。

先确认时间与服务

date -Is
systemctl status ssh.service --no-pager
sudo journalctl -u ssh.service -n 50 --no-pager

Debian/Ubuntu常见SSH服务单元为ssh.service,其他发行版可能使用sshd.service。按实际单元名称替换,不能因为查询了一个不存在的名称而得出“没有错误”。-n 50读取最近50条匹配记录,--no-pager直接输出,不进入翻页界面。

按发生时段缩小范围

sudo journalctl -u ssh.service --since "30 minutes ago" --no-pager
sudo journalctl -u ssh.service --since "2026-10-31 14:00:00" --until "2026-10-31 14:15:00" --no-pager

第二行日期只是格式示例,应替换为实际故障时段。没有明确时区后缀时,时间按系统的解释处理;先用date核对,避免把北京时间记录套进使用UTC显示的服务器。阅读时保留错误前后的启动、退出和认证记录,单条红色或error字样不能独立证明故障原因。

跨启动记录与持续观察

sudo journalctl --list-boots
sudo journalctl -b -1 -u ssh.service --no-pager
sudo journalctl -f -u ssh.service

-b -1指上一次启动,是否可用取决于历史日志是否仍保存;--list-boots只列本机能读取到的启动记录。-f持续跟随新记录,按Ctrl+C结束的是本次查看,不是关闭服务。如果日志只在内存中保存,重启后可能没有上次记录;“查不到”不能证明上次没有异常。

把片段导出到私有文件

log_file=$(mktemp "$HOME/journal-ssh.XXXXXX")
sudo journalctl -u ssh.service --since "30 minutes ago" --no-pager > "$log_file"
wc -l "$log_file"
ls -l "$log_file"

mktemp创建只供当前用户读写的文件,重定向由当前Shell完成。确认命令没有读取错误,再检查文件行数和内容。分享前遮挡密码、令牌、完整客户信息和无关地址;保留服务名、错误码、时间和必要上下文。工单可粘贴必要文本片段或添加脱敏图片;若确需原始日志文件,先核实官方安全接收方式,不默认附件支持txt、log或zip。不要把含敏感内容的片段放在网站可公开下载目录。

没有结果或信息不完整时

现象 下一步
No journal files / 权限不足 核对journal是否存在和当前读取权限,必要时用已授权sudo读取
只有本次启动记录 核对持久化与保留策略;不要为了找旧记录先重启
服务名称正确但没有应用报错 检查应用是否写入自己的文本日志或其他日志系统
重启时间附近出现多条失败 把启动顺序、退出状态和配置变更一起分析,不先删除或vacuum日志