Linux systemd 定时任务
哈喽大家好,我是咸鱼。
说到 Linux 定时任务,大家用得最多的就是 crond 服务,但其实 systemd 也有类似的功能。我们不但可以通过 systemd 来管理服务,还能设置定时任务,那就是 systemd timer。
与 crond 相比,systemd 定时任务具有以下优点:
- 更高的精度:systemd 定时任务可以精确到秒,而 crond 只能精确到分钟。
- 可以限制资源使用:使用 systemd 定时任务可以设置内存和 CPU 的使用限制,比如最多使用 50% 的 CPU。
- 更灵活的配置:systemd 定时任务可以通过条件、依赖关系等进行配置,以控制任务的执行。相比之下,crond 的配置相对简单,灵活性较低。
举个例子,假设我们要通过 crond 配置多个大文件的远程备份(使用 scp、rsync 或 ftp 的方式),但由于大文件的网络传输时间不确定,因此下一个文件的备份任务开始时间几乎都是按照经验估计的。
这可能导致上一个任务的网络传输尚未完成,下一个任务已经开始,同时占用网络带宽,然后又启动了下一个任务,形成恶性循环。
而使用 systemd timer 可以建立任务之间的依赖关系,例如在第一个备份任务完成后再启动第二个备份任务,以此类推。
systemd timer 原理
systemd 定时任务基于 systemd 的单元管理器。它使用两种类型的单元来管理定时任务:.timer
单元和 .service
单元。
.timer
单元:.timer
单元定义了定时规则,包括启动时间、间隔时间等。- 每个
.timer
单元都对应一个或多个关联的.service
单元。
.service
单元:.service
单元定义了要在计时器触发时运行的服务或命令。- 当
.timer
触发时,相关联的.service
单元将被启动。
systemd 定时任务原理是:systemd 定期检查每个 .timer
单元中定义的定时规则,以确定是否触发相应的定时器。一旦定时器触发,systemd 将启动与该定时器关联的 .service
单元,从而执行预定的任务。
在正式介绍 systemd 定时任务之前,我们先要了解什么是单元(unit)。
systemd 单元
简单来讲,单元就是 systemd 的最小管理单位,是单个进程的描述。一个个单元相互调用和依赖,组成一个庞大的任务管理系统。
systemd 中的 unit 有很多类型,下面是一些常见的 unit 类型:
.service
:service 单元,也就是我们常说的系统服务.target
:target 单元,其实就是一堆 unit 的集合,比如常见的multi-user.target
.timer
:timer 单元,负责定时任务。.slice
:slice 单元,负责资源的分配。
每个 unit 都有一个描述文件(unit 负责干什么、怎么干...),它们分散在三个目录:
/lib/systemd/system
:系统默认的 unit 文件/etc/systemd/system
:包含用户自定义的 unit 文件,如果设置了开机自启动,则该目录下的 unit 描述文件会创建一个符号链接。/usr/lib/systemd/system
:用户自己定义的 unit 文件,也会包含一些系统默认的 unit 文件
大多数 linux 发行版中
/lib
是/usr/lib
的软链接,所以 1 和 3 其实是同一目录,作用自然应该是相同的。
其实可以简单分成两类:
/etc/systemd/system
:用户自定义的 unit 文件/usr/lib/systemd/system
:系统默认的 unit 文件和用户安装软件的 unit 文件
# 查看所有 unit
$ systemctl list-unit-files
# 查看所有 Service unit
$ systemctl list-unit-files --type service
# 查看所有 Timer unit
$ systemctl list-unit-files --type timer
关于 systemd unit 相关的内容这里就不细讲了,大家可以看我之前的文章:《systemctl 命令设置开机自启动失败》
设置 systemd 定时任务
有一个检查 https 证书是否过期的脚本 check_https.sh
,我们现在需要系统定期执行这个脚本,除此之外,系统在开机之后也会执行这个脚本。
首先创建一个 service unit
[root@localhost ~]# cat /usr/lib/systemd/system/check-https.service
[Unit]
Description=check https certificates
[Service]
Type=oneshot
ExecStart=check_https.sh
[Install]
WantedBy=multi-user.target
Type=oneshot
表示 service 以一次性(Oneshot)方式运行。这意味着当启动 service 时,它将执行一次,并在完成后退出。
然后我们创建一个 timer unit
Service unit 只是定义了如何执行任务,要定时执行这个 Service,还必须定义 Timer unit
[root@localhost ~]# cat /usr/lib/systemd/system/check-https.timer
[Unit]
Description=Runs check https every day
[Timer]
OnUnitActiveSec=24h
Unit=check-https.service
[Install]
WantedBy=multi-user.target
我们着重来看下 [Timer] 部分:
OnActiveSec
:定时任务生效后,多少时间开始执行任务OnBootSec
:系统启动后,多少时间开始执行任务OnStartupSec
:Systemd 进程启动后,多少时间开始执行任务OnUnitActiveSec
:该 unit 上次执行后,等多少时间再次执行OnUnitInactiveSec
: 定时任务上次关闭后多少时间,再次执行OnCalendar
:基于绝对时间,而不是相对时间执行AccuracySec
:如果因为各种原因,任务必须推迟执行,推迟的最大秒数,默认是60秒Unit
:真正要执行的任务,默认是同名的带有.service
后缀的 unitPersistent
:如果设置了该字段,即使定时任务到时没有启动,也会自动执行相应的 unitWakeSystem
:如果系统休眠,是否自动唤醒系统
上面的 timer 文件里,OnUnitActiveSec=24h
表示 24 小时执行一次任务。
下面是其他的写法:
1、在系统启动 15 分钟后执行,并在系统运行时,每周执行一次
[Timer]
OnBootSec=15min
OnUnitActiveSec=1w
Unit=check-https.service
2、每周周一执行,如果到时定时任务没有启动,会立即执行
[Timer]
OnCalendar=weekly
Persistent=true
Unit=check-https.service
3、每周日凌晨三点执行(时间格式:Year-Month-Day Hour:Minute:Second
)
[Timer]
OnCalendar=Sun *-*-* 03:00:00
Unit=check-https.service
官方文档:https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html
然后我们启动这个定时任务,并设置开机自启动
# 重新加载配置
systemctl daemon-reload
systemctl start check-https.timer
systemctl enable check-https.timer
其他一些定时任务命令:
# 查看所有正在运行的定时任务
systemctl list-timers
# 关闭定时任务
systemctl stop check-https.timer
# 查看定时任务状态
systemctl status check-https.timer
Linux systemd 定时任务的更多相关文章
- Linux 系统定时任务:crontab,anacron
Linux 系统定时任务:crontab,anacron 一.Cron 服务 1. 启动服务 service cron start 2. 关闭服务 service cron stop 3. 重启服务 ...
- Linux systemd 打开调试终端、添加开机自运行程序
/************************************************************************* * Linux systemd 打开调试终端.添加 ...
- LINUX 添加定时任务
LINUX 添加定时任务 crontab - l按 i:x 先按 esc然后 敲入 命令 :x*/5 3 * * 0 /root/ v.sh ..重启服务 service crond restart
- Linux之定时任务Crond使用
Linux之定时任务Crond使用 一.用法 crond服务是linux系统自带的服务,是不需要手动安装的: crond服务是一种守护进程: Linux中的用户使用contab命令来配置corn任务: ...
- linux创建定时任务,定时执行sql
终于弄清楚一个问题了.linux创建定时任务,定时执行sql,其中分为两个case. case-1 sql语句较少,因此直接在 shell脚本中 写sql语句.如下: [oracle@Oracle11 ...
- Linux systemd资源控制初探
Linux systemd资源控制初探 本文记录一次cgroup子目录丢失问题,并简单探索了Linux systemd的资源控制机制. 问题现象 我们希望通过systemd拉起服务并通过cgroup限 ...
- Linux系统定时任务crond那些事
1 Linux系统定时任务 1.1 定时任务介绍 1.1.1 Crond是什么? Crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件.Centos5/ linux系统安装完操作 ...
- Linux 新建定时任务
Linux 新建定时任务: 1.查看指定用户列表: crontab -u apache -l 2.切换至对应用户,这里是apache su apache 3.新增定时任务: crontab -e 写入 ...
- 【Python】Linux crontab定时任务配置方法(详解)
CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行. cron 系统调度进程. 可以使用它在 ...
- Linux之定时任务Crond介绍
Linux之定时任务 定时任务Crond介绍 Crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,我们安装完Centos5/6 linux操作系统之后,默认便 ...
随机推荐
- liquibase customChange
liquibase customChange liquibase changeset 执行Java代码. liquibase支持yml等文件,支持引入sql文件,还支持Java这种方式执行change ...
- jQuery 框架
jQuery 框架 目录 jQuery 框架 一. 概述 二. jQuery 安装引用 2.1 安装 2.2 本地导入使用 2.3 jQuery CDN引入 三. jQuery基本语法 四. 查找标签 ...
- ymal & properties 赋值特性 JSR303数据校验
基本语法 1.空格不能省略 2.以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的. 3.属性和值的大小写都是十分敏感的. key:空格value 字面量直接写在后面就可以 , 字符串默认 ...
- CodeIgniter3.chm 打包编译 需要 hhc.exe - php框架
电子书地址 https://github.com/CodeIgniter-Chinese/rapid-php-application-development 我打包编译好了chm,https://fi ...
- 学习笔记-涛讲F#(中级)
目录 适配器模式 责任链模式 命令模式 策略模式 工厂模式 单例模式 其它内容 这一系列的视频主要讲了F#设计模式的实现,没有太多其它内容,笔记内容主要是转载Snippets tagged desig ...
- 手撕fft算法--fft原理和源码解析
一 前言 在音频信号处理中,fft变换是一个无法绕过过去的存在.借着一次算法出来的机会,把fft熟悉一下不为过啊. 二 问题 这里,其实是由一个问题驱动的,那就是:怎么通过fft的变化来得 ...
- 基于ESP8266的JSON解析实例分析
什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.采用完全独立于编程语言的文本格式来存储和表示数据.其简洁和层次结构清晰的特点使得 J ...
- 通达信金融终端解锁Level-2功能 续(202307)
外挂方式,不修改原程序.解锁Level-2 逐笔分析.对"非法访问"Say NO! LEVEL2逐笔分析破解后,仍然被防调试. 竞价分析,实时资金示例. 逆向通达信Level-2 ...
- undefined reference to vtable for "xxx::xxx" in QT(已解决)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文发布于 2015-02-09 15:37:25 ...
- 直播预告:面对技术带来的新机遇,CG人如何腾飞?
"新锐先锋,玩转未来"--首届实时染3D动画创作大赛由瑞云科技主办,英伟达.青椒云.3DCAT实时渲染云协办,戴尔科技集团.Reallusion.英迈.万生华态.D5渲染器.中视典 ...