systemd 服务单元如何由计时器单元激活?

systemd 服务单元如何由计时器单元激活?

给定一个单元文件 foo.service

# /etc/systemd/system/foo.service
[Service]
ExecStart=/opt/bin/foo --prod

还有一个单元文件 foo.timer

# /etc/systemd/system/foo.timer
[Timer]
OnCalendar=*-*-* 12:00:00

[Install]
WantedBy=timers.target
  • 如果每天 12:00 foo.service 关闭,会发生什么?(它可能会启动)
  • 如果 foo.service 已经开启,每天 12:00 会发生什么?(它会重新启动吗?)

通过阅读 man systemd.timer

对于每个计时器文件,必须存在一个匹配的单元文件,描述计时器到期时要激活的单元。默认情况下,与计时器同名(后缀除外)的服务是活性。示例:定时器文件 foo.timer 激活匹配的服务 foo.service。要激活的单元可能由 Unit= 控制(见下文)。

  • 这是什么意思启用foo.service?这是否表示重新启动或验证它是否已启动?

答案1

通常,systemd定时器的服务是oneshotsimple(默认)启动类型,这意味着服务运行命令然后退出。
在执行 给出的命令期间ExecStart,该单元的状态为active (running),退出时的状态类似于inactive (dead)

使用定时器时,您无需激活服务,systemctl enable --now foo.service而是启用相应的定时器单元systemctl enbale --now foo.timer
定时器的作用大致是systemctl start foo.service在给定的时间内。


  • 如果每天 12:00 foo.service 关闭,会发生什么?(它可能会启动)

foo.service启动但未启用(启动时自动启动)。

  • 如果 foo.service 已经开启,每天 12:00 会发生什么?(它会重新启动吗?)

如果服务处于某种active (running)状态,则什么都不会发生。systemd如果服务已经在运行,则不会尝试启动该服务。

  • 激活 foo.service 是什么意思?是重新启动还是验证它是否已启动?

激活服务意味着启动它,例如systemctl start foo.service

相关内容