| 副标题[/!--empirenews.page--] 
 继续 systemd 教程,这些特殊的例子可以展示给你如何更好的利用 systemd 定时器单元。 在这个 systemd 系列教程中,我们已经在某种程度上讨论了 systemd 定时器单元。不过,在我们开始讨论 sockets 之前,我们先来看三个例子,这些例子展示了如何最佳化利用这些单元。 简单的类 cron 行为我每周都要去收集 Debian popcon 数据,如果每次都能在同一时间收集更好,这样我就能看到某些应用程序的下载趋势。这是一个可以使用 cron 任务来完成的典型事例,但 systemd 定时器同样能做到: # 类 cron 的 popcon.timer [Unit]Description= 这里描述了下载并处理 popcon 数据的时刻 [Timer]OnCalendar= Thu *-*-* 05:32:07Unit= popcon.service [Install]WantedBy= basic.target
 实际的 popcon.service会执行一个常规的wget任务,并没有什么特别之处。这里的新内容是OnCalendar=指令。这个指令可以让你在一个特定日期的特定时刻来运行某个服务。在这个例子中,Thu表示 “在周四运行”,*-*-*表示“具体年份、月份和日期无关紧要”,这些可以翻译成 “不管年月日,只在每周四运行”。 这样,你就设置了这个服务的运行时间。我选择在欧洲中部夏令时区的上午 5:30 左右运行,那个时候服务器不是很忙。 如果你的服务器关闭了,而且刚好错过了每周的截止时间,你还可以在同一个计时器中使用像 anacron 一样的功能。 # 具备类似 anacron 功能的 popcon.timer [Unit]Description= 这里描述了下载并处理 popcon 数据的时刻 [Timer]Unit=popcon.serviceOnCalendar=Thu *-*-* 05:32:07Persistent=true [Install]WantedBy=basic.target
 当你将 Persistent=指令设为真值时,它会告诉 systemd,如果服务器在本该它运行的时候关闭了,那么在启动后就要立刻运行服务。这意味着,如果机器在周四凌晨停机了(比如说维护),一旦它再次启动后,popcon.service将会立刻执行。在这之后,它的运行时间将会回到例行性的每周四早上 5:32. 到目前为止,就是这么简单直白。 延迟执行但是,我们提升一个档次,来“改进”这个基于 systemd 的监控系统。你应该记得,当你接入摄像头的时候,系统就会开始拍照。假设你并不希望它在你安装摄像头的时候拍下你的脸。你希望将拍照服务的启动时间向后推迟一两分钟,这样你就有时间接入摄像头,然后走到画框外面。 为了完成这件事,首先你要更改 Udev 规则,将它指向一个定时器: ACTION=="add", SUBSYSTEM=="video4linux", ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="e207", TAG+="systemd", ENV{SYSTEMD_WANTS}="picchanged.timer", SYMLINK+="mywebcam", MODE="0666"
 这个定时器看起来像这样: # picchanged.timer [Unit]Description= 在摄像头接入的一分钟后,开始运行 picchanged [Timer]OnActiveSec= 1 mUnit= picchanged.path [Install]WantedBy= basic.target
 在你接入摄像头后,Udev 规则被触发,它会调用定时器。这个定时器启动后会等上一分钟(OnActiveSec= 1 m),然后运行picchanged.path,它会监视主图片的变化。picchanged.path还会负责接触webcan.service,这个实际用来拍照的服务。 在每天的特定时刻启停 Minetest 服务器在最后一个例子中,我们认为你决定用 systemd 作为唯一的依赖。讲真,不管怎么样,systemd 差不多要接管你的生活了。为什么不拥抱这个必然性呢? 你有个为你的孩子设置的 Minetest 服务。不过,你还想要假装关心一下他们的教育和成长,要让他们做作业和家务活。所以你要确保 Minetest 只在每天晚上的一段时间内可用,比如五点到七点。 这个跟之前的“在特定时间启动服务”不太一样。写个定时器在下午五点启动服务很简单…: # minetest.timer [Unit]Description= 在每天下午五点运行 minetest.service [Timer]OnCalendar= *-*-* 17:00:00Unit= minetest.service [Install]WantedBy= basic.target
 …可是编写一个对应的定时器,让它在特定时刻关闭服务,则需要更大剂量的横向思维。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |