如何使用计时器配置 Systemd 用户服务

如何使用计时器配置 Systemd 用户服务

我有一个可以按预期工作的 systemd 用户服务。它是这样开始的:

systemctl start test@user

问题是我需要在可能为多个用户的计时器上运行此服务。似乎没有办法在计时器本身中指定用户,也没有办法用@符号传递用户名。

这是计时器:

[Unit]
Description=Test (runs once every 24 hours)

[Timer]
OnUnitActiveSec=24h
Persistent=true
[email protected]

[Install]
WantedBy=timers.target

让我困惑的是“Unit=”中应该放什么。如果我输入“[电子邮件受保护]“它可以工作,但它将始终作为单个用户运行,从而破坏了多用户服务的意义。使用”[电子邮件受保护]”启动计时器,但“systemctl status test@user”显示它始终处于非活动状态,即使计时器设置为 1 分钟间隔也是如此。

我不确定如何列出给定 systemd 服务的所有正在运行的实例,因此当计时器在没有“@user”的情况下运行服务时,我不知道“test@”服务是否以不同的用户身份运行。

使用计时器启动用户服务的正确方法是什么?理想情况下,用户应该能够创建和管理自己的服务以及与这些服务相关的计时器。

答案1

这能满足您的需求吗?

systemctl --user start unit.service

答案2

尝试像这样启动计时器内的服务:

Unit=test@%u.service

来自sytemd.unit(5)说明符的联机帮助页%u

这是运行服务管理器实例的用户的名称。如果是系统管理器,则解析为“root”。请注意,此设置不受服务单元中可配置的影响。

相关内容