使用 .timer 单元重新启动 systemd .service

使用 .timer 单元重新启动 systemd .service

我有以下执行脚本的 systemd myscript.service 单元:

[Unit]
Description=MyScript
Wants=time-sync.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/local/bin/test.sh -a
ExecStop=/usr/local/bin/test.sh -b

[Install]
WantedBy=multi-user.target

我想使用以下 Systemd myscript.timer 单元每分钟重新启动它:

[Unit]
Description=Schedule script execution

[Timer]
OnCalendar=*:0/1

[Install]
WantedBy=timers.target

它只在第一次起作用,之后,状态保持为n/a:

# systemctl list-timers
NEXT                         LEFT        LAST                         PASSED      UNIT                         ACTIVATES
n/a                          n/a         Tue 2019-10-15 14:50:01 EDT  3ms ago     myscript.timer               myscript.service

答案1

如果 .service 单元将从 .timer 单元执行,则它不能具有RemainAfterExit=true.这系统文档提到:

请注意,如果要激活的单元在计时器结束时已经处于活动状态,则不会重新启动,而只是继续运行。在这种情况下,不存在生成新服务实例的概念。因此,设置了 RemainAfterExit= 的服务(即使在服务的主进程退出后仍然持续存在)通常不适合通过重复计时器激活,因为它们只会被激活一次,然后永远保留。

所以,删除RemainAfterExit=true它就会起作用。

相关内容