如何让下面的定时器自动启动?现在计时器只有在我这样做时才起作用systemctl start while-test.timer
。否则,即使我启用了计时器,它也不会自动启动。即使在执行systemctl daemon-reload
或重新启动之后。
while-test .service
-------------------
[Unit]
Description=While loop test script
[Service]
Type=simple
ExecStart=/home/user/bash/while-test.sh
[Install]
WantedBy=default.target
和
while-test .timer
----------------
[Unit]
Description=While loop test script timer
[Timer]
OnCalendar=Mon *-*-* 10:52:00
Unit=while-test.service
[Install]
WantedBy=default.service
答案1
虽然这可能不是OP问题的原因,但本周我遇到了完全相同的问题,就我而言,原因是将真正的单元文件存储在systemd加载计时器后在启动时安装的驱动器分区上(指向它们)带符号链接)。
事实上,检查我的 systemd 日志(使用journalctl -b)实际上显示分区在加载计时器后约0.01秒内立即安装。相反,它尝试加载计时器,但(在日志中)抱怨文件不存在。
所以就像OP的情况一样,我可以在系统启动并运行后手动启动计时器,但它们不会像预期的那样在启动时自动启动。
对于同一问题的任何变体,我预计检查日志可能有助于诊断。
我注意到此页面上的其他答案似乎推断了启用该服务以及计时器的步骤。某处有一个不同的堆栈交换答案,认为该步骤是多余的或可能令人困惑,因为当计时器应该控制它时,它可能会达到像普通守护进程一样自动启动服务的效果。
答案2
systemctl enable while-test.service
systemctl enable while-test.timer
您可能需要使用 sudo 运行它们。这将在启动时启用服务和计时器。验证它是否已启用:
systemctl list-timers
这将显示状态信息,例如下次运行时间、上次运行时间、上次运行以及它激活的服务。