我有一个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
谢谢你的问题,我自己也得到了答案=)