给定一个单元文件 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
定时器的服务是oneshot
或simple
(默认)启动类型,这意味着服务运行命令然后退出。
在执行 给出的命令期间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
。