无法过滤用户服务的 journalctl

kai*_*n88 4 systemd

我在~/.config/systemd/user工作中登录时创建了以下服务文件来备份我的工作数据。

[Unit]
Description=Backup Work Related Files

[Service]
Type=oneshot
ExecStartPre=/usr/bin/ping -c 1 -W 1 xxx
ExecStart=/usr/bin/rsync -avzuhH --progress --delete --exclude=.Trash-1000 /some/folder/ xxx@xxx:Documents/backup
ExecStart=/usr/bin/rsync -avzuhH --progress file xxx@xxx:Documents/backup/file
Run Code Online (Sandbox Code Playgroud)

我可以用 找到服务,systemctl --user list-unit-files我也可以用 开始服务systemctl --user start backup_work.service。出于某种原因,虽然我无法使用journalctl --user -u backup_work.service. 我在日志中正常查看时会看到 rsync 和 ping 的日志,但无法过滤到我的服务文件。

我需要在服务文件中更改某些内容吗?

use*_*686 5

您需要--user-unit=过滤用户单位,因为它们附加了不同的元数据。

$ SYSTEMD_LOG_LEVEL=debug journalctl --user-unit=foobar
Journal filter: (((_UID=0 OR _UID=1000) AND OBJECT_SYSTEMD_USER_UNIT=foobar.service)
                 OR ((_UID=0 OR _UID=1000) AND COREDUMP_USER_UNIT=foobar.service)
                 OR (_UID=1000 AND USER_UNIT=foobar.service)
                 OR (_UID=1000 AND _SYSTEMD_USER_UNIT=foobar.service))
Run Code Online (Sandbox Code Playgroud)

-u总是为系统单位添加过滤器——它独立于--user,它只选择要读取的日志文件。(大多数时候您不需要 --user。)

$ SYSTEMD_LOG_LEVEL=debug journalctl --unit=foobar
Journal filter: ((OBJECT_SYSTEMD_UNIT=foobar.service AND _UID=0)
                 OR (UNIT=foobar.service AND _PID=1)
                 OR (COREDUMP_UNIT=foobar.service AND _UID=0 AND MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1)
                 OR _SYSTEMD_UNIT=foobar.service)
Run Code Online (Sandbox Code Playgroud)