Systemd定时器

Systemd定时器是一种Linux系统下的定时任务管理工具,可以用来替代传统的cron。本文介绍了如何列出所有定时器、查看开机自启动的定时器以及如何启用和配置定时器。例如,创建一个每天更新mlocate数据库的定时器,通过设置OnCalendar参数为daily来实现每日执行。此外,还提到了一些关键参数如AccuracySec和Persistent,用于控制定时任务的精度和持久性。

Systemd定时器简介

https://www.ruanyifeng.com/blog/2018/03/systemd-timer.html


Systemd定时器常用命令

# 列出当前系统中所有活动的 systemd 定时器
systemctl list-timers
NEXTLEFTLASTPASSEDUNITACTIVATESDESCRIPTION
下一次定时器将触发的时间戳下一次定时器触发前还剩下的时间上一次定时器触发的时间戳从上一次定时器触发到现在经过的时间定时器单元的名称定时器关联的单元名称定时器描述信息

在这里插入图片描述

在这里插入图片描述


查看所有定时器单元

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

在这里插入图片描述


查看开机自启动的定时器

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

在这里插入图片描述


自动运行指定定时器

# 自动运行指定定时器
systemctl enable myscript.timer

Systemd定时器示例

用定时器每月更新Unbound的root.hints

# /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系统启动后,多少时间开始执行任务
OnStartupSecSystemd 进程启动后,多少时间开始执行任务
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]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值