我有一个可以按预期工作的 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”。请注意,此设置不受服务单元中可配置的影响。