journalctl - 打印 systemd 日志中的日志条目
概要
journalctl [选项...] [匹配...]
描述
journalctl 用于打印 systemd-journald.service(8) 和 systemd-journal-remote.service(8) 存储在日志中的日志条目。
如果没有参数调用,它将显示调用用户可访问的日志内容,从最早的条目开始。
如果传递了一个或多个匹配参数,则输出将相应地进行过滤。匹配的格式为“FIELD=VALUE”,例如“_SYSTEMD_UNIT=httpd.service”,它引用了结构化日志条目的组件。请参阅 systemd.journal-fields(7) 以获取已知字段的列表。如果指定了多个匹配不同字段的匹配项,则日志条目将同时按这两个字段进行过滤,即结果输出将仅显示匹配所有指定匹配项的条目。如果两个匹配应用于同一字段,则它们将自动匹配为替代项,即结果输出将显示匹配同一字段的任何指定匹配项的条目。最后,字符“+”可以作为命令行中其他术语之间的单独单词出现。这将导致在逻辑或 (OR) 中组合之前和之后的所有匹配项。
也可以通过指定绝对文件路径作为参数来过滤条目。文件路径可以是文件或符号链接,并且该文件在查询时必须存在。如果文件路径引用可执行二进制文件,则会将“_EXE=”匹配添加到查询中,以匹配规范化的二进制文件路径。如果文件路径引用可执行脚本,则会将“_COMM=”匹配添加到查询中,以匹配脚本名称。如果文件路径引用设备节点,则会将“_KERNEL_DEVICE=”匹配添加到查询中,以匹配内核的设备名称和每个祖先设备的名称。符号链接会被取消引用,内核名称会被合成,并且父设备会从查询时的环境中识别。通常,设备节点是实际设备的最佳代理,因为日志条目通常不包含用于标识实际设备的字段。为了使结果的日志条目对于实际设备是正确的,在记录条目时,相关部分的 environment 以及在查询时使用的实际设备,必须与查询时使用的设备相同。由于设备节点通常在重新启动时更改其相应的设备,因此指定设备节点路径会导致结果条目仅限于来自当前启动的条目。
可以使用 --boot、--unit= 等选项添加其他约束,以进一步限制将显示哪些条目(逻辑 AND)。
输出会交错显示所有可访问的日志文件,无论这些日志文件是轮换过的还是当前正在写入,也无论这些日志文件属于系统本身还是属于可访问的用户日志。可以使用 --header 选项来标识正在显示哪些文件。
可以使用 --user、--system、--directory= 和 --file= 选项来修改将使用的日志文件集,请参见下文。
所有用户都可以访问其私有的、每个用户的日志。但是,默认情况下,只有 root 用户和少数特殊组的成员才能访问系统日志和其他用户的日志。属于 "systemd-journal"、"adm" 和 "wheel" 组的成员可以读取所有日志文件。请注意,后两个组通常由发行版指定额外的权限。属于 "wheel" 组的成员通常可以执行管理任务。
默认情况下,输出会通过 less 进行分页,并且长行会被“截断”到屏幕宽度。可以使用左右箭头键来查看隐藏的部分。可以禁用分页;请参见 --no-pager 选项和下面的“环境”部分。
在输出到终端时,行会根据优先级进行着色:优先级为 ERROR 或更高的行会显示为红色;优先级为 WARNING 的行会显示为黄色;优先级为 NOTICE 的行会突出显示;优先级为 INFO 的行会正常显示;优先级为 DEBUG 的行会显示为灰色。
要将条目写入日志,可以使用几种方法。通常,systemd 单元的输出会自动连接到日志,请参见 systemd-journald.service(8)。此外,可以使用 systemdcat(1) 直接将消息发送到日志。
来源选项
以下选项控制从哪里读取日志记录:
--system, --user
显示来自系统服务和内核的消息(使用 --system)。显示来自当前用户服务的消息(使用 --user)。如果未指定两者之一,则显示用户可以查看的所有消息。
^ -user 选项会影响 --unit= 参数的处理方式。请参见 --unit=。
请注意,--user 仅在启用持久性日志记录时才有效,即通过 journald.conf(5) 中的 Storage= 设置。
已在版本 205 中添加。
-M, --machine=
显示来自正在运行的本地容器的消息。指定容器名称以连接到该容器。
已在版本 209 中添加。
-m, --merge
从所有可用的日志中交错显示条目,包括远程日志。
已在版本 190 中添加。
-D DIR, --directory=DIR
接受目录路径作为参数。如果指定,journalctl 将在指定的日志目录 DIR 上运行,而不是在默认的运行时和系统日志路径上运行。
已在版本 187 中添加。
-i GLOB, --file=GLOB
接受文件 glob 作为参数。如果指定,journalctl 将在指定的匹配 GLOB 的日志文件上运行,而不是在默认的运行时和系统日志路径上运行。可以多次指定,在这种情况下,文件将被适当地交错。
在版本 205 中添加。
--root=ROOT
接受一个目录路径作为参数。如果指定,journalctl 将在指定的目录下的 journal 目录和 catalog 文件层次结构上运行,而不是在根目录上运行(例如,--update-catalog 将在 ROOT/var/lib/systemd/catalog/database 中创建,并且在 ROOT/run/journal/ 或 ROOT/var/log/journal/ 下的 journal 文件将被显示)。
在版本 201 中添加。
--image=IMAGE
接受一个磁盘镜像文件或块设备节点的路径。如果指定,journalctl 将在指示的磁盘镜像中的文件系统上运行。此选项类似于 --root=,但它操作的是存储在磁盘镜像或块设备中的文件系统,从而提供了一种简单的方法来从磁盘镜像中提取日志数据。磁盘镜像应仅包含一个文件系统或在 GPT 分区表中包含一组文件系统,遵循 UAPI.2 Discoverable Partitions Specification[1]。有关受支持的磁盘镜像的更多信息,请参见 systemd-spawn(1) 中具有相同名称的开关。
在版本 247 中添加。
--image-policy=policy
接受一个图像策略字符串作为参数,如 systemd.image-policy(7) 中所述。当对通过 --image= 指定的磁盘镜像进行操作时,会强制执行该策略,如上所述。如果未指定,则默认为 "*" 策略,即使用所有已识别的镜像中的文件系统。
--namespace=NAMESPACE
接受一个 journal 命名空间标识符字符串作为参数。如果未指定,则显示由默认命名空间收集的数据。如果指定,则显示指定的命名空间的日志数据。如果命名空间指定为 "*",则显示所有命名空间的数据,并进行交错。如果命名空间标识符以 "+" 为前缀,则显示指定命名空间和默认命名空间的数据,并进行交错,但不显示其他命名空间。有关 journal 命名空间的详细信息,请参阅 systemd-journald.service(8)。
在版本 245 中添加。
筛选选项
以下选项控制如何筛选 journal 记录:
-S, --since=, -U, --until=
开始显示在指定日期或之后(包括指定日期)的条目,或在指定日期或之前(包括指定日期)的条目。日期规范应采用 "2012-10-30 18:17:16" 格式。如果省略时间部分,则假定为 "00:00:00"。如果仅省略秒数部分,则假定为 ":00"。如果省略日期部分,则假定为当前日期。或者,可以理解字符串 "yesterday"、"today" 和 "tomorrow",它们分别指当前日期前一天的 00:00:00、当前日期和当前日期后一天的 00:00:00。 "now" 指的是当前时间。最后,可以指定相对时间,以 "-" 或 "+" 为前缀,分别指当前时间之前或之后的时间。有关完整的日期和时间规范,请参见 systemd.time(7)。请注意,--output=short-full 打印的 timestamp 格式与此完全相同。
在版本 195 中添加。
-c, --cursor=
从日志中指定的位置开始显示条目,该位置由传递的光标指定。
在版本 193 中添加。
--after-cursor=
从日志中指定位置之后的位置开始显示条目,该位置由传递的光标指定。光标在使用 --show-cursor 选项时显示。
在版本 206 中添加。
--cursor-file=FILE
如果 FILE 存在并且包含光标,则从该位置之后开始显示条目。否则,根据给定的其他选项显示条目。最后,将最后一个条目的光标写入 FILE。使用此选项来通过连续调用 journalctl 来持续读取日志。
在版本 242 中添加。
-b [[ID][±offset]|all], --boot[=[ID][±offset]|all]
显示特定启动的消息。这将添加一个匹配项,即 "\_BOOT\_ID="。
参数可以为空,在这种情况下,将显示当前启动的日志。
如果省略了启动 ID,则正偏移量将从日志的开头开始查找启动,并且小于或等于零的偏移量将从日志的末尾开始查找启动。因此,1 表示按时间顺序找到的日志中的第一个启动,2 表示第二个启动,依此类推;而 -0 是最后一个启动,-1 是倒数第二个启动,依此类推。空的偏移量等同于指定 -0,但当当前启动不是最后一个启动时(例如,因为指定了 --directory= 以查看不同机器的日志),则不适用。
如果指定了 32 个字符的 ID,则可以选择性地在其后跟偏移量,该偏移量标识相对于给定启动 ID 的启动。负值表示较早的启动,正值表示较后的启动。如果未指定偏移量,则假定值为零,并显示给定 ID 的启动的日志。
可以使用特殊参数 all 来否定之前使用 -b 的效果。
在版本 186 中添加。
-u, --unit=UNIT|PATTERN
显示指定 systemd 单元 UNIT(例如,服务单元)或与 PATTERN 匹配的任何单元的消息。如果指定了模式,则将单元名称列表与指定的模式进行比较,并使用所有匹配的单元名称。对于每个单元名称,将添加一个匹配项,即来自该单元的消息("_SYSTEMD_UNIT=UNIT"),以及来自 systemd 和关于指定单元的核心转储的消息。还将添加一个匹配项,即 "_SYSTEMD_SLICE=UNIT",因此,如果提供的 UNIT 是 systemd.slice(5) 单元,则将显示所有子单元的日志。
使用 --user 时,所有 --unit= 参数都将转换为匹配用户消息,就像使用 --user-unit= 指定一样。
此参数可以多次指定。
在版本 195 中添加。
--user-unit=
显示指定用户会话单元的消息。这将添加一个匹配项,即来自该单元的消息("_SYSTEMD_USER_UNIT=" 和 "_UID=")以及来自会话 systemd 和关于指定单元的核心转储的消息。还将添加一个匹配项,即 "_SYSTEMD_USER_SLICE=UNIT",因此,如果提供的 UNIT 是 systemd.slice(5) 单元,则将显示所有子单元的日志。
此参数可以多次指定。
在版本 198 中添加。
-I, --invocation=ID[±offset]|offset
显示特定单元的日志消息。这将添加匹配项,如 "_SYSTEMD_INVOCATION_ID=", "OBJECT_SYSTEMD_INVOCATION_ID=", "INVOCATION_ID=", "USER_INVOCATION_ID="。
正偏移量将从日志的开头查找 systemd 单元的调用,而零或负偏移量将从日志的末尾开始查找调用。因此,1 表示按时间顺序找到的日志中的第一个调用,2 表示第二个调用,依此类推;而 0 表示最新的调用,-1 表示倒数第二个调用,依此类推。
如果指定了 32 个字符的 ID,则可以选择性地在其后跟 ±offset,该偏移量标识相对于给定调用 ID 的调用。负值表示较早的调用,正值表示较晚的调用。如果未指定 ±offset,则假定值为零,并将显示给定 ID 的调用的日志。
-I 等效于 --invocation=0,并将显示最新的调用的日志。
当指定偏移量时,必须使用 -u/--unit= 或 --user-unit= 选项指定单元名称。
当与 -b/--boot= 选项一起指定时,将在指定的启动中搜索调用。
在版本 257 中添加。
-t, --identifier=SYSLOG_IDENTIFIER
显示具有指定 syslog 标识符 SYSLOG_IDENTIFIER 的消息。
此参数可以多次指定。
在版本 217 中添加。
-T, --exclude-identifier=SYSLOG_IDENTIFIER
排除具有指定 syslog 标识符 SYSLOG_IDENTIFIER 的消息。
此参数可以多次指定。
在版本 256 中添加。
-p, --priority=
按消息优先级或优先级范围过滤输出。接受单个数字或文本日志级别(例如,介于 0/"emerg" 和 7/"debug" 之间),或数字/文本日志级别的范围,形式为 FROM..TO。日志级别是通常的 syslog 日志级别,如 syslog(3) 中所述,即 "emerg" (0)、"alert" (1)、"crit" (2)、"err" (3)、"warning" (4)、"notice" (5)、"info" (6)、"debug" (7)。如果指定单个日志级别,则将显示具有该日志级别或更低(因此更重要)日志级别的所有消息。如果指定范围,则将显示范围内的所有消息,包括范围的开始值和结束值。这将添加 "PRIORITY=" 匹配项,用于指定的优先级。
在版本 188 中添加。
--facility=
按 syslog 设施过滤输出。接受逗号分隔的数字或设施名称列表。名称是通常的 syslog 设施,如 syslog(3) 中所述。可以使用 --facility=help 来显示已知设施名称的列表并退出。
添加于版本 245。
-g, --grep=
将输出过滤为 MESSAGE= 字段与指定的正则表达式匹配的条目。 使用与 Perl 兼容的正则表达式,有关详细的语法描述,请参阅 pcre2pattern(3)。
如果模式全部为小写,则匹配不区分大小写。否则,匹配区分大小写。这可以通过 --case-sensitive 选项覆盖,请参见下文。
与 --lines=(未以 "+" 为前缀)一起使用时,隐含 --reverse。 添加于版本 237。
--case-sensitive[=BOOLEAN]
使模式匹配区分大小写或不区分大小写。 添加于版本 237。
-k, --dmesg
仅显示内核消息。这会添加匹配项 "_TRANSPORT=kernel"。除非明确指定,否则这会隐含 --boot=0。 添加于版本 205。
输出选项
以下选项控制如何打印日志记录:
-o, --output=
控制显示日志条目的格式。它接受以下选项之一:
short
为默认值,并生成与经典 syslog 文件的格式基本相同的输出,每条日志条目显示一行。
添加于版本 206。
short-full
非常相似,但以 --since= 和 --until= 选项接受的格式显示时间戳。与 short 输出模式中显示的时间戳信息不同,此模式在输出中包含星期几、年份和时区信息,并且与区域设置无关。 添加于版本 232。
short-iso
非常相似,但以 RFC 3339[2] 规范的 ISO 8601 格式显示时间戳。 添加于版本 206。
short-iso-precise
与 short-iso 类似,但包含完整的微秒精度。 添加于版本 234。
short-precise
与 short-iso 类似,但显示带有完整微秒精度的经典 syslog 时间戳。 添加于版本 207。
short-monotonic
与 short-iso 类似,但显示单调时间戳而不是墙壁时钟时间戳。 添加于版本 206。
short-delta
与 short-monotonic 类似,但包含与前一个条目的时间差。不可靠的时间差用 "*" 标记。 添加于版本 252。
short-unix
与 short-iso 类似,但显示自 1970 年 1 月 1 日 UTC 以来的秒数(“UNIX 时间”),而不是墙壁时钟时间戳。时间以微秒精度显示。 添加于版本 230。
verbose
显示包含所有字段的完整结构化条目。 添加于版本 206。
export
将日志序列化为二进制(但主要是基于文本的)流,适用于备份和网络传输(有关更多信息,请参见 [Journal Export Format]。要将二进制流导入回本机 journald 格式,请使用 systemd-journal-remote(8)。 添加于版本 206。
json
将条目格式化为 JSON 对象,并用换行符分隔(有关更多信息,请参见 [Journal JSON Format]。字段值通常编码为 JSON 字符串,有三种例外:
大于 4096 字节的字段编码为 null 值。(可以通过传递 --all 来关闭此设置,但请注意,这可能会分配过长的 JSON 对象。)
日志条目允许在同一日志条目中使用非唯一字段。JSON 不允许在对象中使用非唯一字段。因此,如果遇到非唯一字段,则将使用 JSON 数组作为字段值,并将所有字段值列为数组的元素。
包含不可打印或非 UTF8 字节的字段将编码为数组,其中包含单独格式化的原始字节,格式为无符号数字。
请注意,这种编码是可逆的(除大小限制外)。
版本 206 中添加。
json-pretty
以 JSON 数据结构的格式显示条目,但以多行格式显示,以便更易于人类阅读。
版本 206 中添加。
json-sse
以 JSON 数据结构的格式显示条目,但将其包装成适合服务器发送事件 [5] 的格式。
版本 206 中添加。
json-seq
以 JSON 数据结构的格式显示条目,但使用 ASCII 记录分隔符 (0x1E) 作为前缀,并使用 ASCII 换行符 (0x0A) 作为后缀,符合 JavaScript 对象表示法 (JSON) 文本序列 [6] (“application/json-seq”)。
版本 240 中添加。
cat
生成非常简洁的输出,仅显示每个日志条目的实际消息,不显示任何元数据,甚至不显示时间戳。如果与 `--output-fields=` 选项结合使用,将输出每个日志记录中列出的字段,而不是消息。
版本 206 中添加。
with-unit
类似于 short-full,但它会用单位和用户单位名称作为前缀,而不是传统的 syslog 标识符。在使用模板实例时很有用,因为它将包含单位名称中的参数。
版本 239 中添加。
--truncate-newline
在输出时,将每个日志消息截断为第一个换行符,以便仅显示每条消息的第一行。
版本 254 中添加。
--output-fields=
一个以逗号分隔的列表,其中包含应该包含在输出中的字段。这仅对通常显示所有字段的输出模式(详细、导出、json、json-pretty、json-sse 和 json-seq)以及 cat 有影响。对于前者,`__CURSOR`、`__REALTIME_TIMESTAMP`、`__MONOTONIC_TIMESTAMP` 和 `_BOOT_ID` 字段始终会打印。
版本 236 中添加。
-n, --lines=
显示最新的日志事件,并限制显示的事件数量。该参数是一个正整数或 "all",用于禁用限制。此外,如果数字以 "+" 为前缀,则将使用最旧的日志事件。如果没有提供参数,则默认值为 10。
如果使用 `--follow`,则此选项是隐含的。如果未以 "+" 为前缀,并且与 `--grep=` 结合使用,则隐含 `--reverse`。
-r, --reverse
反转输出,以便首先显示最新的条目。
版本 198 中添加。
--show-cursor
光标在最后一个条目之后显示,如下所示:
-- cursor: s=0639...
光标的格式是私有的,并且可能会更改。
版本 209 中添加。
--utc
以协调世界时 (UTC) 形式显示时间。
在版本 217 中添加。
-x, --catalog
使用消息目录中的解释文本来增强日志行。这将在输出中为日志消息添加说明性的帮助文本,当可用时。这些简短的帮助文本将解释错误或日志事件的上下文、可能的解决方案,以及指向支持论坛、开发人员文档和任何其他相关手册的链接。请注意,并非所有消息都提供帮助文本,只有部分消息提供。有关消息目录的更多信息,请参阅[日志消息目录][7]。
注意:在将 journalctl 输出附加到错误报告时,请不要使用 -x。
在版本 196 中添加。
-W, --no-hostname
不显示日志消息的主机名字段。此开关仅对短格式输出模式有效(参见上文)。
注意:此选项不会从日志条目中删除主机名的出现,因此它不会阻止主机名在日志中可见。
在版本 230 中添加。
--no-full, --full, -l
当字段无法容纳在可用列中时,进行省略。默认情况下,显示完整字段,允许它们换行或被分页器截断(如果使用分页器)。
旧选项 -l/--full 已经不再有用,除了用于撤消 --no-full。
在版本 196 中添加。
-a, --all
显示所有字段,即使它们包含不可打印的字符或非常长。默认情况下,包含不可打印字符的字段将被缩写为“blob data”。(请注意,分页器可能会再次转义不可打印的字符。)
-f, --follow
仅显示最新的日志条目,并持续打印新条目,直到按下 Ctrl-C(或以其他方式终止工具)。
journalctl 将发送一个 sd_notify(3) “READY=1” 消息,一旦它初始化并成功建立对日志的监视。
--no-tail
即使在 follow 模式下,也显示所有存储的输出行。撤销 --lines= 的效果。
-q, --quiet
抑制所有信息性消息(即“-- Journal begins at ...”、“-- Reboot --”),以及作为普通用户运行时,关于无法访问的系统日志的任何警告消息。
--synchronize-on-exit=
接受一个布尔值参数。如果为 true 并且在 --follow 模式下运行,则在收到 SIGTERM/SIGINT 时,将发出日志同步请求(相当于 journalctl --sync),并且日志输出将继续,直到此请求完成。这对于将日志输出与服务或外部事件的运行时同步非常有用,以确保在发出 SIGTERM/SIGINT 时,日志子系统排队的所有日志数据都能够被处理并显示在日志输出结束时。默认值为 false。
在版本 258 中添加。
分页器控制选项
以下选项控制分页器支持:
--no-pager
不将输出管道传输到分页器。
-e, --pager-end
立即在隐含的分页器工具中跳转到日志的末尾。这隐含了 --lines=1000 和 --boot=0,除非明确指定其他值,以保证分页器不会缓冲无限大小的日志。请注意,此选项仅支持 less(1) 分页器。
版本 198 中添加。
前向安全密封 (FSS) 选项
以下选项可与下面描述的 --setup-keys 命令一起使用:
--interval=
指定在生成 FSS 密钥对时,使用 --setup-keys 时密钥更改的间隔。较短的间隔会增加 CPU 消耗,但会缩短无法检测到的日志更改的时间范围。默认值为 15 分钟。
请注意,--output=json-sse 和 --output=json-seq 会被静默迁移到 --output=json。
版本 189 中添加。
--verify-key=
指定用于 --verify 操作的 FSS 验证密钥。
版本 189 中添加。
--force
当传递 --setup-keys 且已配置前向安全密封 (FSS) 时,重新创建 FSS 密钥。
版本 206 中添加。
命令
以下命令将被识别。如果没有指定,则默认显示日志记录:
-N, --fields
打印当前在所有日志条目中使用过的所有字段名称。
版本 229 中添加。
-F, --field=
打印指定字段在所有日志条目中可以采用的所有可能的数据值。
版本 195 中添加。
--list-boots
显示一个表格,其中列出了相对于当前启动的启动编号、其 ID 以及第一个和最后一个与该启动相关的消息的时间戳。当与 -n/--lines=[+]N 选项一起指定时,将只显示第一个(当数字前面带有“+”)或最后一个(不带前缀)N 个条目。当与 -r/--reverse 一起指定时,列表将以相反的顺序显示。
版本 209 中添加。
--list-invocations
列出单元的调用 ID。需要使用 -u/--unit= 或 --user-unit= 指定单元名称。显示一个表格,其中列出了调用编号(相对于当前或最新的调用)、其 ID 以及第一个和最后一个与该调用相关的消息的时间戳。当指定 -b/-boot 时,将显示启动中的调用。当与 -n/--lines=[+]N 选项一起指定时,将只显示第一个(当数字前面带有“+”)或最后一个(不带前缀)N 个条目。当与 -r/--reverse 一起指定时,列表将以相反的顺序显示。
版本 257 中添加。
--disk-usage
显示所有日志文件的当前磁盘使用情况。这显示了所有已归档和活动日志文件使用的磁盘空间的总和。
版本 190 中添加。
--vacuum-size=, --vacuum-time=, --vacuum-files=
`--vacuum-size=` 删除最旧的已归档日志文件,直到它们使用的磁盘空间低于指定的大小。接受通常的“K”、“M”、“G”和“T”后缀(以 1024 为底)。
`--vacuum-time=` 删除比指定的时间段更早的已归档日志文件。接受通常的“s”(默认)、“m”、“h”、“days”、“weeks”、“months”和“years”后缀,有关详细信息,请参见 systemd.time(7)。
`--vacuum-files=` 仅保留指定的日志文件数。
请注意,运行 --vacuum-size= 选项只会对 --disk-usage 显示的输出产生间接影响,因为后者包括活动日志文件,而清理操作仅对已归档的日志文件进行操作。 同样,--vacuum-files= 选项可能不会实际将日志文件数减少到指定的数量以下,因为它不会删除活动日志文件。
^ -vacuum-size=、--vacuum-time= 和 --vacuum-files= 可以组合在一个调用中,以对已归档的日志文件强制执行大小、时间和文件数量限制的任意组合。 将这三个参数中的任何一个指定为零等同于不强制执行特定的限制,因此是多余的。
这三个开关也可以与 --rotate 组合成一个命令。 如果是这样,所有活动文件首先会轮换,然后执行请求的清理操作。 轮换的作用是所有当前活动的文件都会被归档(并且可能会打开新的、空的日志文件作为替换),因此清理操作将产生最大的效果,因为它能够将到目前为止写入的所有日志数据都考虑在内。
添加于版本 218。
^ -verify
检查日志文件内部的一致性。 如果该文件是使用 FSS 生成的,并且已使用 --verify-key= 指定了 FSS 验证密钥,则会验证日志文件的真实性。
添加于版本 189。
^ -sync
要求日志守护进程将所有尚未写入的日志数据写入后端文件系统并同步所有日志。 此调用不会返回,直到同步操作完成。 此命令可保证在调用之前写入的任何日志消息都会在返回时安全地存储在磁盘上。
添加于版本 228。
^ -relinquish-var
要求日志守护进程执行与 --flush 选项相反的操作:如果请求,守护进程将继续将日志数据写入 /run/log/journal/,并停止写入 /var/log/journal/。 后续调用 --flush 将导致日志输出切换回 /var/log/journal/,请参见上述内容。
添加于版本 243。
^ -smart-relinquish-var
类似于 --relinquish-var,但如果根文件系统和 /var/log/journal/ 位于同一个挂载点上,则不执行任何操作。 此操作用于系统关闭期间,以便使日志守护进程停止将数据写入 /var/log/journal/,以防该目录位于需要卸载的挂载点上。
添加于版本 243。
^ -flush
要求日志守护进程将存储在 /run/log/journal/ 中的任何日志数据刷新到 /var/log/journal/,如果启用了持久存储。 此调用不会返回,直到操作完成。 请注意,此调用是幂等的:数据仅在系统运行时期间从 /run/log/journal/ 刷新到 /var/log/journal/ 一次(但请参见 --relinquish-var),如果这已经发生,此命令将干净地退出而不执行任何操作。 此命令有效地保证所有数据在返回时都会刷新到 /var/log/journal/。
在版本 217 中添加。
--rotate
请求日志守护进程轮转日志文件。此调用不会返回,直到轮转操作完成。日志文件轮转的作用是,将所有当前活动的日志文件标记为已归档并重命名,以便将来不再写入。然后创建新的(空的)日志文件来代替它们。此操作可以与 --vacuum-size=、--vacuum-time= 和 --vacuum-file= 结合到一个命令中,请参见上述内容。
在版本 227 中添加。
--header
不显示日志内容,而是显示访问的日志字段的内部标头信息。
当尝试识别乱序的日志条目时,此选项特别有用,例如,当计算机使用错误的时间启动时。
在版本 187 中添加。
--list-catalog [128 位 ID...]
以消息 ID 表的形式列出消息目录的内容,以及它们的简短描述字符串。
如果指定了任何 128 位 ID,则仅显示这些条目。
在版本 196 中添加。
--dump-catalog [128 位 ID...]
显示消息目录的内容,条目之间用一条由两个短划线和 ID 组成的分隔线分隔(格式与 .catalog 文件相同)。
如果指定了任何 128 位 ID,则仅显示这些条目。
在版本 196 中添加。
--update-catalog
更新消息目录索引。每次安装、删除或更新新的目录文件时,都需要执行此命令以重建二进制目录索引。
在版本 199 中添加。
--setup-keys
不显示日志内容,而是为前向安全密封 (FSS) 生成新的密钥对。这将生成一个密封密钥和一个验证密钥。密封密钥存储在日志数据目录中,应保留在主机上。验证密钥应存储在外部。有关前向安全密封的信息,请参阅 journald.conf(5) 中的 Seal= 选项,以及指向一篇参考的学术论文的链接,该论文详细介绍了其所基于的密码学理论。
在版本 189 中添加。
-h, --help
打印简短的帮助文本并退出。
--version
打印简短的版本字符串并退出。
退出状态
成功时,返回 0;否则,返回非零的失败代码。
环境
$SYSTEMD_LOG_LEVEL
发出的消息的最大日志级别(具有更高日志级别(即不太重要的消息)的消息将被抑制)。采用逗号分隔的值列表。值可以是以下值之一(按重要性递减的顺序排列):emerg、alert、crit、err、warning、notice、info、debug,或者范围为 0 到 7 的整数。有关更多信息,请参阅 syslog(3)。每个值可以选择性地以以下之一为前缀:console、syslog、kmsg 或 journal,后跟一个冒号,以设置特定日志目标的最大日志级别(例如,SYSTEMD_LOG_LEVEL=debug,console:info 指定以调试级别记录日志,除非记录到控制台,此时应以信息级别记录)。请注意,全局最大日志级别优先于任何每个目标的 সর্বোচ্চ日志级别。
$SYSTEMD_LOG_COLOR
一个布尔值。如果为 true,则写入 tty 的消息将根据优先级进行颜色编码。
此设置仅在将消息直接写入终端时才有用,因为 journalctl(1) 和其他显示日志的工具将根据日志级别自行对消息进行颜色编码。
$SYSTEMD_LOG_TIME
一个布尔值。如果为 true,控制台日志消息将在开头加上时间戳。
此设置仅在将消息直接写入终端或文件时才有用,因为 journalctl(1) 和其他显示日志的工具将根据日志条目的元数据附加时间戳。
$SYSTEMD_LOG_LOCATION
一个布尔值。如果为 true,消息将在开头加上文件名和行号,指示消息在源代码中的位置。
请注意,日志位置通常作为元数据附加到日志条目中。尽管如此,在消息文本中直接包含它,在调试程序时可能仍然很方便。
$SYSTEMD_LOG_TID
一个布尔值。如果为 true,消息将在开头加上当前的数字线程 ID (TID)。
请注意,此信息通常作为元数据附加到日志条目中。尽管如此,在消息文本中直接包含它,在调试程序时可能仍然很方便。
$SYSTEMD_LOG_TARGET
日志消息的目标位置。可以是 console(记录到附加的 tty)、console-prefixed(记录到附加的 tty,但带有编码日志级别和“facility”的前缀,请参阅 syslog(3))、kmsg(记录到内核循环日志缓冲区)、journal(记录到 journal)、journal-or-kmsg(如果可用,则记录到 journal,否则记录到 kmsg)、auto(自动确定合适的日志目标,默认值)或 null(禁用日志输出)。
$SYSTEMD_LOG_RATELIMIT_KMSG
是否对 kmsg 进行速率限制。采用布尔值。默认值为“true”。如果禁用,systemd 将不会对写入 kmsg 的消息进行速率限制。
$SYSTEMD_PAGER、$PAGER
在未提供 --no-pager 标志时要使用的分页器。如果设置了 $SYSTEMD_PAGER,则使用它;否则使用 $PAGER。如果既没有设置 $SYSTEMD_PAGER 也没有设置 $PAGER,则会依次尝试一组已知的分页器实现,包括 [less]({filename}../../less)(1) 和 more(1),直到找到一个为止。如果没有找到分页器实现,则不会调用任何分页器。将这两个环境变量设置为一个空字符串或值“cat”等同于传递 --no-pager。
注意:如果未设置 $SYSTEMD_PAGERSECURE,则只能使用 $SYSTEMD_PAGER 和 $PAGER 来禁用分页器(使用“cat”或“”,否则将被忽略。
$SYSTEMD_LESS
覆盖传递给 less 的选项(默认值为“FRSXMK”)。
用户可能想要更改两个选项:
K
此选项指示分页器在按下 Ctrl+C 时立即退出。要允许 less 处理 Ctrl+C,以便返回分页器命令提示符,请取消设置此选项。
如果 $SYSTEMD_LESS 的值不包含“K”,并且调用的分页器是 less,则 Ctrl+C 将被可执行文件忽略,需要由分页器处理。
X
此选项指示分页器不要向终端发送 termcap 初始化和反初始化字符串。默认情况下,它设置为允许命令输出在分页器退出后仍保留在终端中。但是,这会阻止某些分页器功能起作用,特别是无法使用鼠标滚动分页输出。
请注意,设置常规的 $LESS 环境变量对 systemd 工具调用的 less 命令没有影响。
有关更多讨论,请参阅 less(1)。
$SYSTEMD_LESSCHARSET
覆盖传递给 less 的字符集(默认情况下为“utf-8”,如果确定调用终端与 UTF-8 兼容)。
请注意,设置常规的 $LESSCHARSET 环境变量对 systemd 工具调用的 less 命令没有影响。
$SYSTEMD_PAGERSECURE
像 less(1) 这样的通用分页器命令,除了“分页”功能(即滚动输出)外,还支持打开或写入其他文件以及运行任意 shell 命令。当命令以提升的权限调用时,例如在 sudo(8) 或 pkexec(1) 下,分页器将成为安全边界。必须小心,仅使用具有严格限制功能的程序作为分页器,并且不允许使用户执行未经授权的交互式功能,例如打开或创建新文件或启动子进程。如果分页器支持,则可以启用分页器的“安全模式”,如下所述。建议明确启用“安全模式”或使用 --no-pager 或 PAGER=cat 完全禁用分页器,以允许不受信任的用户以提升的权限执行命令。
此选项接受一个布尔值参数。当设置为 true 时,将启用分页器的“安全模式”。在“安全模式”下,调用分页器时将设置 LESSSECURE=1,这将指示分页器禁用打开或创建新文件或启动新子进程的命令。目前,只有 less(1) 已知可以理解此变量并实施“安全模式”。
当设置为 false 时,不会对分页器施加任何限制。设置 SYSTEMD_PAGERSECURE=0 或不从继承的环境中删除它可能会允许用户调用任意命令。
如果未设置 $SYSTEMD_PAGERSECURE,systemd 工具将尝试自动确定是否应启用“安全模式”以及分页器是否支持它。如果有效 UID 与登录会话的所有者不同,请参阅 geteuid(2) 和 sd_pid_get_owner_uid(3),或者在 sudo(8) 或类似工具下运行时(设置了 $SUDO_UID [8]),则启用“安全模式”。在这种情况下,将设置 SYSTEMD_PAGERSECURE=1,并且不使用已知不支持实施“安全模式”的分页器。请注意,此自动检测仅涵盖最常见的提升权限机制,并且旨在提供便利。建议明确设置 $SYSTEMD_PAGERSECURE 或禁用分页器。
请注意,如果需要遵守 $SYSTEMD_PAGER 或 $PAGER 变量,除了禁用分页器之外,还必须设置 $SYSTEMD_PAGERSECURE。
$SYSTEMD_COLORS
接受一个布尔值参数。如果为 true,systemd 及其相关实用程序将在其输出中使用颜色,否则输出将为单色。此外,该变量可以采用以下特殊值:“16”、“256”,以将颜色使用限制为基本的 16 种或 256 种 ANSI 颜色。这可以用来覆盖基于 $TERM 和控制台连接方式所做的自动决策。
$SYSTEMD_URLIFY
该值必须是一个布尔值。控制是否应为支持该功能的终端模拟器生成输出中的可点击链接。这可以用来覆盖 systemd 基于 $TERM 和其他条件所做的决策。
示例
不带参数时,将显示所有收集的日志,不进行过滤:
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
如果使用分隔符“+”,则可以将两个表达式组合成一个逻辑 OR。以下命令将显示来自 Avahi 服务进程 PID 为 28097 的所有消息,以及来自 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
(有关这些模式的解释,请参阅 systemd.journal-fields(7))。
显示由 D-Bus 可执行文件生成的所有日志:
journalctl /usr/bin/dbus-daemon
显示上次启动的所有内核日志:
journalctl -k -b -1
显示来自 systemd 服务 apache.service 的实时日志:
journalctl -f -u apache
参见
systemd(1), systemd-cat(1), systemd-journald.service(8), systemctl(1), coredumpctl(1), systemd.journal-fields(7), journald.conf(5), systemd.time(7), systemd-journal-remote.service(8), systemd-journal-upload.service(8)
注意事项
UAPI.2 可发现分区规范
https://uapi-group.org/specifications/specs/discoverable_partitions_specification
RFC 3339
https://tools.ietf.org/html/rfc3339
日志导出格式
https://systemd.io/JOURNAL_EXPORT_FORMATS#journal-export-format
日志 JSON 格式
https://systemd.io/JOURNAL_EXPORT_FORMATS#journal-json-format
服务器发送事件
https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events
JavaScript 对象表示法 (JSON) 文本序列
https://tools.ietf.org/html/rfc7464
日志消息目录
https://systemd.io/CATALOG
建议其他工具根据需要设置和检查 `$SUDO_UID`,并将其视为一个
通用接口。