如何跟踪来来去去的模板单元(即套接字激活单元)的 systemd 日志日志?

如何跟踪来来去去的模板单元(即套接字激活单元)的 systemd 日志日志?

我有一个inetd风格的服务部署为 systemd 套接字单元及其附带的服务单元,例如,my-service.socket带有Accept=true[email protected]

每次收到新连接时,systemd 都会生成一个服务实例,其模板名称类似于:[email protected]:9418-198.51.100.56:55346.service

my-service我可以使用以下命令查看已生成的所有日志: journalctl -u 'my-service@*'。我想实时跟踪任何新生成的日志,但journalctl -fu 'my-service@*'不起作用,如journalctl手册页所述:

如果指定了模式,则会将日志中找到的单位名称列表与指定的模式进行比较,并使用所有匹配的内容。

因此,journalctl只会跟踪已经运行的实例,而不跟踪之后启动的任何实例。

有没有办法跟踪 的所有实例的所有日志输出[email protected],甚至是在我开始跟踪日志之后开始的那些实例?

答案1

你可以尝试:

watch journalctl -eu 'my-service@*'
  • 如果您需要“每 2 秒”不同的更新,您可以使用-n手表选项。
  • e选项将始终使最后的条目对此用途可见,请参阅man journalctl

    -e, --pager-end
    立即跳转到隐含分页工具内的日志末尾。
    这意味着 -n1000 保证分页器不会缓冲无限大小的日志。
    这可能会被带有其他数值的显式 -n 覆盖,而 -nall 将禁用此上限。
    请注意,此选项仅支持 less(1) 寻呼机。


如果它们对所有单元使用单独的公共切片,则另一种可能性应该是选择单元的切片。

-u, --unit=UNIT|PATTERN
...
还为“_SYSTEMD_SLICE=UNIT”添加匹配,这样如果提供的 UNIT 是 systemd.slice(5) 单元,则该切片的子级的所有日志都将是显示。

答案2

我遇到了同样的挑战,但在读完你的问题后,我找到了答案:

# journalctl -f -u my-service@\*.service

谢谢你的问题,我自己也得到了答案=)

相关内容