除非我启用它,否则我位于的 .timer 文件~/.config/systemd/user
不会显示在命令的输出中。systemctl --user list-timers --all
此命令不显示禁用的 .timers 和启用的 .timers 是否正常?
[Install]
由于错误,我无法在没有部分的情况下启用 .timer The unit files have no installation config
。根据 freedesktop.org 文档:
计时器单位将自动具有 Before= 类型的对timers.target的依赖
这是否意味着我不必启用 .timer 即可工作?
如果我确实需要启用我的 .timer:
我相信这default.target
就是软件用户登录成功后执行是WantedBy
。
我还相信用户 systemd 实例是由 启动的pam_systemd
,我相信这发生在之前default.target
。
所以在我看来,如果我使用default.target
计时器,它将在登录后激活。如果我OnStartupSec
在这种情况下使用,它会正确计算从 systemd 用户实例启动开始的时间吗?
另一方面,如果我使用timers.target
,由于这是一个用户计时器,它会在登录之前激活并从激活时间开始计算秒数,还是只会在systemd --user
启动后注册并开始计算时间?
答案1
自从我问这个问题以来,我更加红了,发现我的问题是基于我这边的误解 - 我认为 systemd 的用户和系统实例都依赖于同一组目标。根据这每个systemd实例都使用自己设定的目标,因此很明显,在systemd的用户实例启动之前,用户计时器不会激活,因此计时器将从systemd的用户实例启动开始正确计算时间。
系统管理器启动[电子邮件受保护]每个用户的单元,它为每个用户启动一个单独的非特权 systemd 实例——用户管理器。与系统管理器类似,用户管理器启动由 default.target 拉入的单元。对于非图形会话,使用default.target。每当用户登录到图形会话时,登录管理器都会启动graphical-session.target 目标,该目标用于拉入图形会话所需的单元。当特定硬件可供用户使用时,会启动许多目标(如右侧所示)。
既然如此,我相信 timers.target 是两者中更合适的,但两者都应该可以工作。