在特定时间启动/停止systemd.service


14

我想在特定时间启动和停止systemd.service。大概我将使用.timer单元来开始工作,但是是否有一种内置的方式在特定的持续时间或特定的时间之后停止该工作,还是我必须创建另一个执行该.timer的.timer单元stop

谢谢

Answers:


6

要使用计时器停止服务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

2

您可以使用几个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/Cronhttps://wiki.archlinux.org/index.php/Cron


8
计划工作如何改善.timerOP已经知道的系统化单位?
帕维尔·希默达

我可以,是的,但是我的问题确实是如何使用systemd正确地做到这一点?我认为必须有某种标准的方法才能使作业在特定时间或特定持续时间后停止。
Jamie Kitson

@JamieKitson说实话,我认为除了cron和systemd计时器之外,实际上不需要有这样的功能。大多数systemd安装都不会使用这些功能,并且systemctl使用cron,systemd计时器和任何您喜欢的东西运行都没有错。我认为该答案与其他答案一样有效。
帕维尔·希默达

例如,如何允许www-data运行systemctl start&stop?
alvaropgl

@alvaropgl您的评论与用户(www-data)无关,它们与运行/未运行进程(systemctl)可能具有的有限访问权限无关,这是主题。请开始一个新的话题。提示:您可能想研究使API能够完成您想要的事情,而不是您当前对www-data用户启用更多责任和范围的方法。
Scott Prive

2

实际上,在.service文件中配置了某些运行时之后,还有另一种方法来停止服务。

RuntimeMaxSec=...

您可能不喜欢该服务被认为失败的事实,但这是取消长期运行的服务的逻辑结果。

为了获得更好的答案,您可能需要解释使用这种不寻常功能的理由。服务通常是指永久运行或直到它们被明确停止为止,而不仅仅是固定的时间。


1
:是的,我们讨论了这一点,它的局限性在邮件列表中lists.freedesktop.org/archives/systemd-devel/2016-April/...
杰米·基特森

1
常见的。仅在夜间,当服务器获得最少流量时,运行资源需求服务(也许是SETI)怎么样?另外,在我工作的地方,我们有一个警报守护程序,用于在服务器出现异常时通过支持人员的电话唤醒支持团队。我们真的不希望在我们真正醒着时运行这些烦人的事情,因为这些服务器在高峰使用期间左右左右都会出现问题。
James M. Lay
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.