有时候,某些服务你想要定期执行,或者是开机后执行,或者是什么服务启动多久后执行等等的。在过去,我们大概都是使用 crond 这个服务来定期处理, 不过,既然现在有一直常驻在内存当中的 systemd 这个好用的东西,加上这 systemd 有个协力服务,名为 timers.target的家伙,这家伙可以协助定期处理各种任务。
systemd.timer 的优势
为什么要使用systemd.timer呢?
由于所有的 systemd 的服务产生的信息都会被纪录 (log),因此比 crond 在 debug 上面要更清楚方便的多;
各项 timer 的工作可以跟 systemd 的服务相结合;
各项 timer 的工作可以跟 control group (cgroup,用来取代 /etc/secure/limit.conf 的功能) 结合,来限制该工作的资源利用
任务需求
基本上,想要使用 systemd 的 timer 功能,你必须要有几个要件:
系统的 timer.target 一定要启动
要有个 sname.service 的服务存在 (sname 是你自己指定的名称)
要有个 sname.timer 的时间启动服务存在
sname.timer 的设置值
可以到 /etc/systemd/system 下面去创建这个 *.timer 档,那这个文件的内容要项有哪些东西呢?基本设置主要有下面这些: (man systemd.timer & man systemd.time)
使用于 OnCalendar 的时间
如果你想要从 crontab 转成这个 timer 功能的话,那么对于时间设置的格式就得要了解了解,基本上的格式如下所示:
常用的间隔时间单位有:
us 或 usec:微秒 (10-6 秒)
ms 或 msec:毫秒 (10-3 秒)
s, sec, second, seconds
m, min, minute, minutes
h, hr, hour, hoursd, day, days
w, week, weeksmonth, months
y, year, years
此外,你也可以使用英文常用的口语化日期代表,例如 today, tomorrow 等!假设今天是2015-08-13 13:50:00 的话,那么:
17.5 CentOS 7.x 默认启动的服务简易说明
17.6 重点回顾
早期的服务管理使用 systemV 的机制,通过 /etc/init.d/*, service, chkconfig, setup 等指令来管理服务的启动/关闭/默认启动;
从 CentOS 7.x 开始,采用 systemd 的机制,此机制最大功能为平行处理,并采单一指令管理 (systemctl),开机速度加快!
systemd 将各服务定义为 unit,而 unit 又分类为 service, socket, target, path, timer 等不同的类别,方便管理与维护
启动/关闭/重新启动的方式为: systemctl [start|stop|restart] unit.service
设置默认启动/默认不启动的方式为: systemctl [enable|disable] unit.service
查询系统所有启动的服务用 systemctl list-units --type=service 而查询所有的服务 (含不启动) 使用 systemctl list-unit-files --type=service
systemd 取消了以前的 runlevel 概念 (虽然还是有相容的 target),转而使用不同的target 操作环境。常见操作环境为 multi-user.targer 与 graphical.target。 不重新开机而转不同的操作环境使用 systemctl isolate unit.target,而设置默认环境则使用 systemctlset-default unit.target
systemctl 系统默认的配置文件主要放在 /usr/lib/systemd/system,管理员若要修改或自行设计时,则建议放在 /etc/systemd/system/ 目录下。
管理员应使用 man systemd.unit, man systemd.service, man systemd.timer 查询/etc/systemd/system/ 下面配置文件的语法, 并使用 systemctl daemon-reload 载入后,才能自行撰写服务与管理服务。
除了 atd 与 crond 之外,可以 通过 systemd.timer 亦即 timers.target 的功能,来使用systemd 的时间管理功能。
一些不需要的服务可以关闭。