如何跟踪systemd单元日志?

jir*_*lav 9 linux logging systemd

我有一个正在运行的 systemd 单元,我想跟踪它的日志。

我知道我可以使用以下方法显示单位的日志:

journalctl -u my_unit.service
Run Code Online (Sandbox Code Playgroud)

但这仅打印当前日志而不遵循它们。

我知道我还可以systemd使用以下方法跟踪日志:

journalctl -f
Run Code Online (Sandbox Code Playgroud)

但这会通过跟踪所有已知日志来发送垃圾邮件,因此我必须搜索我感兴趣的内容。

一个临时解决方案似乎是通过管道跟踪日志来 grep 过滤输出,但这不是很系统的解决方案:

journalctl -f | grep "what i'm interested in"
Run Code Online (Sandbox Code Playgroud)

不是有跟踪某个单位的日志的命令吗?

我已经尝试过,但没有奏效:

journalctl -uf my_unit.service
Run Code Online (Sandbox Code Playgroud)

jir*_*lav 9

我发现我使用的参数顺序不正确。实际上可以使用以下方法跟踪单个单元的日志:

journalctl -fu my_unit.service
Run Code Online (Sandbox Code Playgroud)

其他工作变化:

journalctl -f -u my_unit.service
journalctl -u my_unit.service -f
Run Code Online (Sandbox Code Playgroud)

journalctl手册:

-u, --unit=UNIT|PATTERN

    显示指定 systemd 单元UNIT(例如服务单元)或任何匹配的单元的消息PATTERN。如果指定了模式,则将在日志中找到的单元名称列表与指定模式进行比较,并使用所有匹配项。对于每个单元名称,都会为来自单元 (" ") 的消息添加一个匹配项,并为来自 systemd 的消息和有关指定单元的核心转储的消息添加其他匹配项。_SYSTEMD_UNIT=UNIT

    该参数可以多次指定。

-f, --follow

    仅显示最近的日记帐分录,并在新分录附加到日记帐时连续打印它们。