如何使用一个命令按单位和标识符查看 journalctl 日志?

dea*_*sin 4 systemd systemd-journald systemd-unit

我有一个 vpn 服务单元,我可以使用它查看日志...

journalctl -u vpn
Run Code Online (Sandbox Code Playgroud)

我还有一个脚本可以手动与 vpn 交互,并使用...

exec > >(systemd-cat -t vpn.sh) 2>&1
Run Code Online (Sandbox Code Playgroud)

我可以查看日志...

journalctl -t vpn.sh
Run Code Online (Sandbox Code Playgroud)

我尝试使用...查看两个日志

journalctl -u vpn -t vpn.sh
Run Code Online (Sandbox Code Playgroud)

但它没有用。

有没有办法同时查看两个日志?或者是否可以-t vpn.sh在 vpn 服务单元文件中设置标识符 ( ) 以匹配我的脚本 ( vpn.sh)的标识符。

fil*_*den 6

TL; DR:这将起作用:

$ journalctl _SYSTEMD_UNIT=vpn.service + SYSLOG_IDENTIFIER=vpn.sh
Run Code Online (Sandbox Code Playgroud)

您可以使用+连接两组连接并查找与任一表达式匹配的日志日志行。(这记录在 journalctl 的手册页中。)

为此,您需要通过其正确的字段名称(标志-u-t它们的快捷方式)来引用它们。

您可以查看systemd.journal-fields(5)以获取字段名称的文档。(该页面还将解释为什么其中一个有前导下划线而另一个没有。)

因为_SYSTEMD_UNIT您将需要精确匹配,包括.service后缀(-u快捷方式很聪明,在将其转换为按字段查询时会找到确切的单位名称。)

把它们放在一起,你会得到上面的命令。