创建systemd定时器

一.systemd定时器简介

systemd定时器是Linux系统中用于创建、管理和调度定时任务的一种功能强大的工具。它利用systemd的服务管理功能,允许用户在系统启动时或运行时按照预设的时间间隔或特定时间点自动执行命令或脚本。

与传统的cron或at工具相比,systemd定时器具有一些显著的优势:

  1. 集成性:systemd定时器与systemd服务紧密集成,可以充分利用systemd提供的各种功能和特性,如依赖管理、日志记录等。
  2. 灵活性:systemd定时器支持多种时间调度方式,包括一次性执行、周期性执行、事件触发等,可以满足各种复杂的定时任务需求。
  3. 可靠性:systemd定时器在系统启动时自动激活,并且可以在系统运行时进行管理和监控,确保定时任务的可靠性和稳定性。


二、systemd定时器单元文件

systemd定时器单元文件是Linux系统中用于配置和管理定时任务的重要组件。这些文件通常以.timer后缀结尾,并存储在特定的目录中,如/etc/systemd/system/usr/lib/systemd/system

systemd定时器单元文件主要由几个关键部分组成。其中,[Unit]部分用于指定定时器的基本配置,如描述信息、依赖关系等。这些配置帮助systemd了解定时器的性质和所需的环境。另一个重要的部分是[Timer],它定义了定时器的触发规则。这些规则包括定时器的启动延迟、执行间隔等设置。常用的配置项有OnActiveSecOnBootSecOnCalendar等。例如,OnActiveSec指定当服务单元进入活动状态时触发定时器,而OnBootSec则指定在系统引导时触发定时器。

此外,systemd定时器主要有两种类型:单调定时器和实时定时器。单调定时器从一个特定的时间(如系统启动或systemd服务单元执行的开始时间)开始后,经过一段时间触发。而实时定时器则是在某个特定的时钟时间触发,类似于cron定时任务。

通过编写这些单元文件,用户可以定义定时任务的调度规则和执行的操作,从而实现自动化任务管理。同时,systemd提供了丰富的命令和工具,用于查看和管理这些定时器单元文件的状态和日志,方便用户进行调试和监控。

总的来说,systemd定时器单元文件是Linux系统中用于管理和调度定时任务的一种功能强大的工具,可以满足各种复杂的任务调度需求。

三、创建systemd定时器

先创建一个脚本

再给脚本提供权限 chmod +x /usr/local/bin/boot_backup

在/etc/systemd/system/目录下写一个配套的服务单元文件

内容解释: 

Description:提供提供简短描述信息,便于管理员理解和管理
Type: 服务类型,simple表示启动进程后立即认为服务启动成功。
ExecStart=/usr/local/bin/boot_backup:服务将启动并执行/usr/local/bin/boot_backup这个脚本

在/etc/systemd/system/目录下写一个定时器文件

内容解释:

 Description,述这个定时器的功能,用于显示和日志记录

 OnUnitActiveSec=5s定义当定时器关联的服务单元变为活跃状态后,定时器应等待多长时间再触发。这里设置为5秒

 AccuracySec=1us,设置定时器触发的精度,这里设置为1微秒

 WantedBy=multi-user.target,指定这个定时器单元应该在哪个目标下被激活,这里指定为multi-user.target,即多用户模式

[Timer]常用字节

  1. OnBootSec: 这个选项指定了定时器在系统启动后多少秒触发。例如,OnBootSec=5min意味着定时器将在系统启动后的5分钟内触发。

  2. OnActiveSec: 这个选项指定了当相关服务单元进入活动状态后多少秒触发定时器。它常用于确保服务在启动一段时间后再次运行,或者定期轮询某项任务。

  3. OnCalendar: 这个选项允许你使用类似于cron的时间表达式来定义触发时间。你可以指定特定的日期、时间、星期几等。例如,OnCalendar=*-*-* 0/2:00意味着每两小时触发一次定时器。

  4. Unit: 在[Timer]部分中,Unit选项用于指定当定时器触发时应该启动的服务单元。它必须指向一个有效的.service单元文件。

  5. Persistent: 如果设置为true,当定时器触发时,即使相关服务单元没有运行,它也会被启动。如果设置为false,则仅当服务单元已经处于活动状态时,定时器才会触发它。

  6. AccuracySec: 这个选项定义了定时器触发的最大时间偏差。由于系统负载和其他因素,定时器可能不会精确地按照指定的时间触发。通过设置AccuracySec,你可以指定一个时间范围,在这个范围内触发定时器都是可接受的。

  7. RandomizedDelaySec: 为了避免多个定时器在同一时间触发导致的系统负载峰值,你可以使用这个选项为定时器添加一个随机延迟。例如,设置为30min将在定时器应该触发的时间前后30分钟内随机选择一个时间点来触发它。

通过setenforce 0命令,我们可以将SELinux设置为Permissive模式,允许服务在不受限制的情况下进行测试或运行

  

执行systemctl daemom-reload命令重新装载单元文件。

设置定时器开机自启、运行,并查看状态

  

在这里,我们可以看到Active的状态为running,代表定时器运行正常

Triggers: ● boot_backup.service 表示当定时器触发时,它将启动boot_backup.service服务单元。

查看/root/syslog.txt文件

之前编写的脚本是往/root/syslog.txt里写入一次时间,定时器设置为5秒执行一次。所以我们需要检验一下。执行cat /root/systemd_test.txt命令。 

  

如图间隔5秒符合之前的设置,则定时器创建成功

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值