linux定时任务基础命令介绍(14)

2019-09-23 09:15:11刘景俊

[Unit] 标签下指定了不依赖于特定类型的通用配置信息,比如例子中两个文件都指定了一个选项Description=表示描述信息。

[Install] 标签下保存了本单元的安装信息,其中WantedBy=表示当使用systemctl enable命令启用该单元时,会在指定的目标的.wants/或.requires/下创建对应的符号链接(如上例)。这么做的结果是:当指定的目标启动时本单元也会被启动。

除了这两个所有配置文件都可以设置的标签外(其余选项可以通过命令man 5 systemd.unit查看),每个服务单元还有一个特定单元类型的标签,比如我们例子中.service文件中的[Service]和.timer文件中的[Timer]。

[Service] 标签下Type=后的值指明了执行方式,设置为simple并配合ExecStart=表明指定的程序(我们例子中的脚本)将不会fork()而启动;如果设置为oneshot表明只执行一次(类似at),如果需要让systemd在服务进程退出之后仍然认为该服务处于激活状态,则还需要设置RemainAfterExit=yes。其余选项请用命令man 5 systemd.service查看

[Timer]标签中可以指定多种单调定时器,所谓"单调时间"的意思是从开机那一刻(零点)起, 只要系统正在运行,该时间就不断的单调均匀递增(但在系统休眠时此时间保持不变),永远不会往后退,并且与时区也没有关系。 即使在系统运行的过程中,用户向前/向后修改系统时间,也不会对"单调时间"产生任何影响。包括:

OnActiveSec=       表示相对于本单元被启用的时间点
OnBootSec=         表示相对于机器被启动的时间点
OnStartupSec=      表示相对于systemd被首次启动的时间点
OnUnitActiveSec=   表示相对于匹配单元(本标签下Unit=指定的单元)最后一次被启动的时间点
OnUnitInactiveSec= 表示相对于匹配单元(本标签下Unit=指定的单元)最后一次被停止的时间点

我们的例子中使用了其中的两个OnActiveSec=60和OnUnitActiveSec=30指定本单元在启用之后60秒调用Unit=后的单元,并在此单元被启用后每隔30秒再次启用它,达到了定时周期性的执行的目的。

这些定时器后指定的时间单位可以是:us(微秒), ms(毫秒), s(秒), m(分), h(时), d(天), w(周), month(月), y(年)。如果省略了单位,则表示使用默认单位‘秒'。可以写成5h 30min表示之后的5小时30分钟。

[Timer]标签下还可以设置基于挂钟时间(wall clock)的日历定时器OnCalendar= ,所谓"挂钟时间"是指真实世界中墙上挂钟的时间, 在操作系统中实际上就是系统时间,这个时间是操作系统在启动时从主板的时钟芯片中读取的。由于这个时间是可以手动修改的,所以,这个时间既不一定是单调递增的、也不一定是均匀递增的。其时间格式可以是: