Answers:
要使用计时器停止服务A,可以创建oneshot
将与之冲突的服务B,然后使用计时器来启动服务B。
如果一个单元在另一个单元上设置了“冲突=”,则启动前者将停止后者,反之亦然。(来源)
A.服务:
[Unit]
Conflicts=B.service
...
B.服务:
[Unit]
Description=B service description
[Service]
Type=oneshot
ExecStart=/bin/echo ''
定时器
[Timer]
AccuracySec=1
OnActiveSec=10
[Install]
WantedBy=timers.target
10秒后,以下将停止服务A。
systemctl start A.service
systemctl start B.timer
您可以使用几个cron作业:
#┌────────────分钟(0-59) #│┌────────────小时(0-23) #││┌──────────────每月的某日(1-31) #│││┌──────────────月(1-12) #││││┌────────────────星期几(0-6) #│││││ #│││││ * * * * * systemctl start $ SERVICE.service * * * * * systemctl stop $ SERVICE.service
在cron的更多信息:https://en.wikipedia.org/wiki/Cron,https://wiki.archlinux.org/index.php/Cron
systemctl
使用cron,systemd计时器和任何您喜欢的东西运行都没有错。我认为该答案与其他答案一样有效。
实际上,在.service
文件中配置了某些运行时之后,还有另一种方法来停止服务。
RuntimeMaxSec=...
您可能不喜欢该服务被认为失败的事实,但这是取消长期运行的服务的逻辑结果。
为了获得更好的答案,您可能需要解释使用这种不寻常功能的理由。服务通常是指永久运行或直到它们被明确停止为止,而不仅仅是固定的时间。
.timer
OP已经知道的系统化单位?