定时器

发布时间 2023-12-24 13:13:07作者: qianyuzz

背景

参数 解释
OnActiveSec 定时器生效后,多少时间开始执行任务
OnBootSec 系统启动后,多少时间开始执行任务
OnStartupSec Systemd 进程启动后,多少时间开始执行任务
OnUnitActiveSec 该单元上次执行后,等多少时间再次执行
OnUnitInactiveSec 定时器上次关闭后多少时间,再次执行
OnCalendar 基于绝对时间,而不是相对时间执行
AccuracySec 如果因为各种原因,任务必须推迟执行,推迟的最大秒数,默认是60秒
Unit 真正要执行的任务,默认是同名的带有.service后缀的单元
Persistent 如果设置了该字段,即使定时器到时没有启动,也会自动执行相应的单元
WakeSystem 如果系统休眠,是否自动唤醒系统

单元描述文件对应的目录

/lib/systemd/system:系统默认的单元文件
/etc/systemd/system:用户安装的软件的单元文件
/usr/lib/systemd/system:用户自己定义的单元文件

查看定时器

使用一下命令查看所有互动定时器

[root@localhost ~]# systemctl list-timers
名字 功能
NEXT 下一次定时器将触发的时间戳
LEFT 下一次定时器触发前还剩下的时间
LAST 上一次定时器触发的时间戳
PASSED 从上一次定时器触发到现在经过的时间
UNIT 定时器单元的名称
ACTIVATES 定时器关联的单元名称
DESCRIPTION 定时器描述信息

如果要查看所有定时器(包括非活动的定时器),则需要加上 --all

 systemctl list-timers --all

创建

单调定时器

编写一个定时器文件,命名为boot_backup.timer,保存在/etc/systemd/system目录下。内容如下:

[Unit]
Description=Run boot backup weekly and on boot

[Timer]
OnBootSec=0     
OnUnitActiveSec=1w   
Unit=boot_backup.service

[Install]
WantedBy=multi-user.target
OnBootSec=0 在启动时触发
OnUnitActiveSec=1w 每隔一周触发
multi-user.target 当系统处于多用户模式(即multi-user.target)时,你的定时器也应该被激活和执行

服务单元

编写服务单元:

[root@localhost ~]# vim /etc/systemd/system/boot_backup.service

内容如下:

[Unit]
Description=Run boot backup weekly and on boot

[Service]
Type=simple
ExecStart=/usr/local/bin/boot_backup

这里的 Type 设置成 simple(默认值)。如果这只成 oneshot ,那么执行一次就会就会退出,系统会关闭定时器。

ExecStart 定义要执行的任务。

脚本

编写脚本

[root@localhost ~]# vim /usr/local/bin/boot_backup

内容

#!/usr/bin/bash
xfsdump -f /opt/dump_boot /boot -L dump_boot -M drive0

赋予权限

[root@localhost ~]# chmod +x /usr/local/bin/boot_backup 

加载

重载单元文件:

[root@localhost ~]# systemctl daemon-reload 

设置开机自启:

[root@localhost ~]# systemctl enable boot_backup.timer 
Created symlink from /etc/systemd/system/multi-user.target.wants/boot_backup.timer to /etc/systemd/system/boot_backup.timer.

启动定时器:

[root@localhost ~]# systemctl start  boot_backup.timer 

查看

可以发现已经多了一个了。

[root@localhost ~]# systemctl list-timers
NEXT                         LEFT          LAST                         PASSED               UNIT                         ACTIVATES
n/a                          n/a           n/a                          n/a                  boot_backup.timer            boot_backu
六 2023-12-23 22:00:00 PST  53min left    六 2023-12-23 21:00:01 PST  6min ago             docker-cleanup.timer         docker-clean
日 2023-12-24 00:00:00 PST  2h 53min left 六 2023-12-23 07:40:05 PST  13h ago              unbound-anchor.timer         unbound-anch
日 2023-12-24 17:01:41 PST  19h left      日 2023-09-10 05:04:40 PDT  3 months 13 days ago systemd-tmpfiles-clean.timer systemd-tmpf

4 timers listed.
Pass --all to see loaded but inactive timers, too.