无法过滤用户服务的 journalctl

无法过滤用户服务的 journalctl

我创建了以下服务文件以便~/.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

我可以使用 找到服务systemctl --user list-unit-files,也可以使用 启动服务systemctl --user start backup_work.service。但由于某种原因,我无法使用 查看此服务的日志journalctl --user -u backup_work.service。当我正常查看日志时,我可以看到 rsync 和 ping 的日志,但我无法过滤到我的服务文件。

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

答案1

你需要--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))

-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)

相关内容