我有以下执行脚本的 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
它就会起作用。