journalctl-查看日志
ssk-wh Lv4

Systemd服务目前在较为流行的发行版中均统一管理了所有服务的启动日志,用户可以只用journalctl一个命令,查看到全部的日志信息。

语法

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

描述

用于查询由 systemd- journald服务写入的的日志内容。

如果不带参数调用,它将会从最早的日志开始,显示日志的全部内容

如果传递了一个或多个匹配参数,则会相应地过滤输出。 匹配的格式为“FIELD=VALUE”,例如 “_SYSTEMD_UNIT=httpd.service”。 如果指定了多个匹配项来匹配不同的字段,则日志条目将被两者过滤,即结果输出将仅显示匹配所有此类指定匹配项的条目。 如果两个匹配项适用于同一个字段,那么它们将自动匹配为替代项,即结果输出将显示与同一字段的任何指定匹配项匹配的条目。 最后,字符“+”可能在命令行中作为其他术语之间的单独单词出现。 这会导致之前和之后的所有匹配项组合成析取(即逻辑或)。

选项

journalctl 的功能比较强大,可选的参数有很多,其中最常见的选项如下表:

选项
-f, –follow 仅显示最近的日志条目,并在打印新增加的日志
-n, –lines= 显示最近的日志事件并限制显示的事件数。 如果使用 –follow,则隐含此选项。 该参数是一个正整数或“全部”以禁用行限制。 如果没有给出参数,默认值为 10。
-r, –reverse 反转输出,最新的日志在最上方输出。
-o, –output= 更改日志输出模式(short,short-full,short-iso,short-iso-precise,short-precise,short-monotonic,short-unix,verbose,export,json,json-pretty,json-sse,json-seq,cat,with-unit)
–list-boots 显示有关已记录引导的简洁信息
-k, –dmesg 仅显示内核消息。 这等同于 -b 选项并添加匹配项“_TRANSPORT=kernel”
-b, –boot[=ID] 显示当前启动或指定启动的日志
-u, --unit=UNIT|PATTERN 显示指定 systemd 单元 UNIT(例如服务单元)或与 PATTERN 匹配的任何单元的消息。 如果指定了模式,则将在日志中找到的单元名称列表与指定模式进行比较,并使用所有匹配项。 对于每个单元名称,为来自该单元的消息(“_SYSTEMD_UNIT=UNIT”)添加一个匹配项,同时为来自 systemd 的消息和有关指定单元的核心转储的消息添加其他匹配项。
这个参数可以被指定很多次。
–user-unit= 显示指定用户会话单元的消息。 这将为来自单元的消息(“_SYSTEMD_USER_UNIT=”和“_UID=”)添加匹配项
-S, –since=, -U, –until= 分别开始显示指定日期或晚于指定日期或指定日期或早于指定日期的条目。 日期规范应采用“2012-10-30 18:17:16”格式。 如果省略时间部分,则假定为“00:00:00”。 如果仅省略秒部分,则假定为“:00”。 如果省略日期部分,则假定为当前日期。 或者,也可以时刻使用字符串“yesterday”、“today”、“tomorrow”,它们分别指的是当天前一天、当天或当天后一天的00:00:00。 “now”是指当前时间。 最后,可以指定相对时间,前缀为“-”或“+”,分别表示当前时间之前或之后的时间。
–system, –user 显示来自系统服务和内核的消息(使用 –system)。 显示来自当前用户服务的消息(使用 –user)。 如果两者均未指定,则显示用户可以看到的所有消息。
–sync 要求日志守护进程将所有尚未写入的日志数据写入支持文件系统并同步所有日志。 在同步操作完成之前,此调用不会返回。 此命令保证在其调用之前写入的任何日志消息在其返回时安全地存储在磁盘上。
–flush 如果启用了持久存储,则要求日志守护进程将存储在 /run/log/journal 中的所有日志数据刷新到 /var/log/journal 中。 在操作完成之前,此调用不会返回。 请注意,此调用是幂等的:数据仅在系统运行时从 /run/log/journal 刷新到 /var/log/journal 一次,如果这已经发生,则此命令会干净地退出而不执行任何操作。 此命令有效地保证所有数据在返回时都刷新到 /var/log/journal。
–rotate 要求日志守护程序滚动日志文件。 在旋转操作完成之前,此调用不会返回。 日志文件滚动的效果是,所有当前活动的日志文件都被标记为已归档并重命名,以便将来永远不会写入它们。 然后在它们的位置创建新的(空的)日志文件。 此操作可以与 –vacuum-size=、–vacuum-time= 和 –vacuum-file= 组合成一个命令。

返回值

成功返回0; 否则,返回一个非零失败代码

示例

没有参数,所有收集的日志都显示为未过滤:

journalctl

指定一个匹配项后,将显示具有与表达式匹配的字段的所有日志:

journalctl _SYSTEMD_UNIT=avahi-daemon.service

journalctl _SYSTEMD_CGROUP=/user.slice/user-42.slice/session-c1.scope

如果匹配了两个不同的字段,则只显示同时匹配两个表达式的条目:

journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097

如果两个匹配项引用同一个字段,则显示与任一表达式匹配的所有条目:

journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service

如果使用分隔符“+”,则两个表达式可以组合成逻辑或。 以下将显示来自 PID 为 28097 的 Avahi 服务进程的所有消息以及来自 D-Bus 服务(来自其任何进程)的所有消息:

journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097 + _SYSTEMD_UNIT=dbus.service

要显示一个单元发出的所有字段以及关于该单元的所有字段,应使用选项 -u/–unit=。 journalctl -u name 扩展为类似于以下的复杂过滤器:

_SYSTEMD_UNIT=name.service

+ UNIT=name.service _PID=1

+ OBJECT_SYSTEMD_UNIT=name.service _UID=0

+ COREDUMP_UNIT=name.service _UID=0 MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1

显示 D-Bus 可执行文件生成的所有日志:

journalctl /usr/bin/dbus-daemon

显示上次启动的所有内核日志:

journalctl -k -b -1

显示来自系统服务 apache.service 的实时日志显示:

journalctl -f -u apache

显示本次启动后的所有日志:

journalctl -b

显示上一次次启动后的所有日志:

journalctl -b -1

搜索从特定日期和时间之后的日志:

journalctl --since "2023-11-03 12:00:00"

搜索从相对时间之后的日志(例如,过去的1小时):

journalctl --since "1 hour ago"

 Comments