Systemd定时器简介
https://www.ruanyifeng.com/blog/2018/03/systemd-timer.html
Systemd定时器常用命令
# 列出当前系统中所有活动的 systemd 定时器
systemctl list-timers
| NEXT | LEFT | LAST | PASSED | UNIT | ACTIVATES | DESCRIPTION |
|---|---|---|---|---|---|---|
| 下一次定时器将触发的时间戳 | 下一次定时器触发前还剩下的时间 | 上一次定时器触发的时间戳 | 从上一次定时器触发到现在经过的时间 | 定时器单元的名称 | 定时器关联的单元名称 | 定时器描述信息 |


查看所有定时器单元
# 查看所有Timer单元
systemctl list-unit-files --type timer

查看开机自启动的定时器
# 查看开机自启动的定时器
systemctl list-unit-files --type timer --state enabled

自动运行指定定时器
# 自动运行指定定时器
systemctl enable myscript.timer
Systemd定时器示例
# /usr/lib/systemd/system/mlocate-updatedb.timer - mlocate 数据库更新定时器
[Unit]
# - 每天更新 mlocate 数据库的定时器
Description=Updates mlocate database every day
[Timer]
# Unit 选项的默认值为与定时器同名的服务单元 /usr/lib/systemd/system/mlocate-updatedb.service;
# 因此该定时器会触发并启动 /usr/lib/systemd/system/mlocate-updatedb.service 服务单元。
# - 定时器每天运行一次
OnCalendar=daily
# - 最大推迟时间为 24小时
AccuracySec=24h
# - 如果定时器错过预定的运行时间,定时器将在系统下一次开机时运行
Persistent=true
[Install]
# - 将定时器单元安装到 timers.target 中,以便系统会自动启动该定时器
WantedBy=timers.target
定时器常用参数
| 参数 | 解释 |
|---|---|
| OnActiveSec | 定时器生效后,多少时间开始执行任务 |
| OnBootSec | 系统启动后,多少时间开始执行任务 |
| OnStartupSec | Systemd 进程启动后,多少时间开始执行任务 |
| OnUnitActiveSec | 该单元上次执行后,等多少时间再次执行 |
| OnUnitInactiveSec | 定时器上次关闭后多少时间,再次执行 |
| OnCalendar | 基于绝对时间,而不是相对时间执行 |
| AccuracySec | 如果因为各种原因,任务必须推迟执行,推迟的最大秒数,默认是60秒 |
| Unit | 真正要执行的任务,默认是同名的带有.service后缀的单元 |
| Persistent | 如果设置了该字段,即使定时器到时没有启动,也会自动执行相应的单元 |
| WakeSystem | 如果系统休眠,是否自动唤醒系统 |
自定义示例
# 创建定时器
vim /etc/systemd/system/${服务单元同名}.timer
- 定时器配置内容:
[Unit]
# 单元描述:每天凌晨 3 点重启 edge 服务的定时器
Description=Timer to restart edge daily at 3 AM
[Timer]
# 定时触发时间:每天的 03:00:00
# 格式为:年-月-日 时:分:秒(星号表示“任意”)
OnCalendar=*-*-* 03:00:00
# 如果系统在预定时间关机,重启后会立刻补执行错过的任务
Persistent=true
[Install]
# 启用时将计时器绑定到 timers.target,使其随系统启动一起启动
WantedBy=timers.target
- 启动定时器
# 冲在定时器
systemctl daemon-reload
# 启动定时器
systemctl enable --now ${服务单元同名}.timer
# 查看定时器状态
systemctl status edge.timer -l
# 查看所有定时器
systemctl list-timers --all
- 查看定时器执行历史
# 查看特定定时器的日志
journalctl -u [timer-name]
Systemd定时器是一种Linux系统下的定时任务管理工具,可以用来替代传统的cron。本文介绍了如何列出所有定时器、查看开机自启动的定时器以及如何启用和配置定时器。例如,创建一个每天更新mlocate数据库的定时器,通过设置OnCalendar参数为daily来实现每日执行。此外,还提到了一些关键参数如AccuracySec和Persistent,用于控制定时任务的精度和持久性。
2154

被折叠的 条评论
为什么被折叠?



