如何找出哪个“单位”正在登录journalctl

Roa*_*ers 2 systemd systemd-journald

我正在使用 usbmount 并终于让它工作了。我花了这么长时间才让它工作的原因之一是我认为它的最新版本(从源代码构建)没有正确安装我的驱动器,因为我在日志中看不到安装命令。我正在使用:

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

查看基于博客文章的日志。我现在使用的更高版本似乎是它自己的服务,并且不会在该单元下登录。

如果我立即运行,journalctl -f我确实会看到我感兴趣的日志:

Apr 23 06:51:35 raspberrypi systemd[1]: Starting usbmount@dev-sda.service...
Apr 23 06:51:35 raspberrypi usbmount[925]: loaded usbmount configurations
Apr 23 06:51:35 raspberrypi usbmount[927]: trying to acquire lock /var/run/usbmount/.mount.lock
Apr 23 06:51:35 raspberrypi usbmount[930]: acquired lock /var/run/usbmount/.mount.lock
Apr 23 06:51:35 raspberrypi usbmount[949]: /dev/sda contains filesystem type vfat
Apr 23 06:51:35 raspberrypi usbmount[952]: mountpoint /media/usb0 is available for /dev/sda
Apr 23 06:51:35 raspberrypi usbmount[953]: executing command: mount -tvfat -osync,noexec,nodev,noatime,nodiratime /dev/sda /media/usb0
Run Code Online (Sandbox Code Playgroud)

但我也得到了很多其他的东西(事实上,所有的东西!)。我努力了:

 $ journalctl -u usbmount@.service -f
-- Journal begins at Mon 2022-04-04 13:05:58 BST. --
Run Code Online (Sandbox Code Playgroud)

但没有日志。我已经尝试过systemctl list-unit-files --all,但其中没有列出任何看起来可能是我需要查看 usbmount 日志的“单元”。事实上,在上面的日志中你可以看到它说Starting usbmount@dev-sda.service所以我很困惑为什么这不起作用!

mur*_*uru 5

首先,@inusbmount@.service表示它是一个模板单元。您可以使用usbmount@foo.service、等,其中每个都使用参数(分别为 、 )usbmount@1000.service实例化模板。这些实例化单元的名称分别是,而不是普通的。因此,要使用的名称分别为,在您的情况下为。foo1000usbmount@foo.serviceusbmount@1000.serviceusbmount@servicejournalctlusbmount@foo.serviceusbmount@1000.serviceusbmount@dev-sda.service

要仅显示任何usbmount服务的日志,您可以在单元名称中使用模式:

journalctl -u 'usbmount*'
Run Code Online (Sandbox Code Playgroud)

也就是说,您可以调整journalctl输出以查看更多详细信息。例如,有--output=with-unit,它将显示确切的单位名称:

% journalctl --output with-unit _PID=703 -n 1
Sat 2022-04-23 06:01:27 UTC muru gdm.service[703]: GLib: Source ID 163 was not found when attempting to remove it
Run Code Online (Sandbox Code Playgroud)

所以产生这个日志条目的单位是gdm.service

您还可以用来--output=verbose查看有关日志条目的所有信息。例子:

% journalctl --output verbose _PID=703 -n 1
Sat 2021-11-13 04:20:53.377000 UTC [s=6edbe8a0f4d644ac88a82448282c6f5b;i=2c4cb;b=977a8e5bf1c04b458502c8a9230477dc;m=b04611bd2;t=5dd4c12dfd4b7;x=e25d8723d4bd6c3c]
    _SYSTEMD_SLICE=system.slice
    _BOOT_ID=977a8e5bf1c04b458502c8a9230477dc
    _MACHINE_ID=06f3f1ec925e4a81834eee9c5c7da4fc
    _HOSTNAME=muru
    _UID=0
    _GID=0
    _TRANSPORT=syslog
    _CAP_EFFECTIVE=1ffffffffff
    PRIORITY=3
    SYSLOG_FACILITY=1
    SYSLOG_IDENTIFIER=gdm
    _PID=703
    _COMM=gdm
    _EXE=/usr/bin/gdm
    _CMDLINE=/usr/bin/gdm
    _SYSTEMD_CGROUP=/system.slice/gdm.service
    _SYSTEMD_UNIT=gdm.service
    _SYSTEMD_INVOCATION_ID=ee4611230c6b443d9eb5b362250d19b3
    SYSLOG_TIMESTAMP=Apr 23 15:01:27 
    MESSAGE=GLib: Source ID 163 was not found when attempting to remove it
    SYSLOG_RAW=<11>Apr 23 15:01:27 gdm: GLib: Source ID 163 was not found when attempting to remove it
    _SOURCE_REALTIME_TIMESTAMP=1650693687464817
Run Code Online (Sandbox Code Playgroud)

您可以看到,在本例中,PID 703 的命令是gdm( _COMM=gdm),单位是gdm.service(_SYSTEMD_UNIT=gdm.service )。

还有 JSON 输出,以便于机器解析。