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

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

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

journalctl -u vpn

我还有一个手动与 VPN 交互的脚本,并记录到日志中......

exec > >(systemd-cat -t vpn.sh) 2>&1

我可以用...查看日志

journalctl -t vpn.sh

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

journalctl -u vpn -t vpn.sh

但这没有用。

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

答案1

TL;DR:这会起作用:

$ journalctl _SYSTEMD_UNIT=vpn.service + SYSLOG_IDENTIFIER=vpn.sh

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

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

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

因为_SYSTEMD_UNIT您将需要完全匹配,包括后缀.service-u快捷方式很智能,在将其翻译为按字段查询时会找到准确的单位名称。)

将它们放在一起,您将得到上面的命令。

答案2

我找到了我想发布的替代解决方案。有些人觉得它很有用。我可以在 Unit 文件中设置SyslogIdentifierunder [Service],以便它与我的脚本中的标识符匹配。

所以

[Unit]
Description=vpn management service

[Service]
SyslogIdentifier=vpn.sh
Type=simple
ExecStart=/bin/bash /home/myusername/scripts/vpn.sh

因此,当我手动调用脚本时,标识符现在将与 vpn.sh 中设置的标识符匹配。在脚本的顶部它被设置为..

exec > >(systemd-cat -t vpn.sh) 2>&1

现在查看 systemd 调用 vpn.sh 和手动调用 vpn.sh 的日志。

journalctl -t vpn.sh --since today

或者

journalctl SYSLOG_IDENTIFIER=vpn.sh --since today

答案3

看来服务名称也可以用作标识符。像下面这样的库曼对我有用。

journalctl -t vpn -t vpn.sh

-t, --identifier=SYSLOG_IDENTIFIER 显示指定系统日志标识符 SYSLOG_IDENTIFIER 的消息。

   This parameter can be specified multiple times.

相关内容