我有一个 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 文件中设置SyslogIdentifier
under [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.