linux下Timer定时器的使用

本博客将会介绍两种实现timer的使用方式:

systemd定时器和cron工具的用法

第一种方式:使用cron设置定时任务

使用cron设置定时任务可以提高工作效率,减少人为错误,确保任务按时执行,并且方便监控和管理任务的执行情况

1、编辑用户的cronta文件

编辑用户的crontab文件通常是为了设置定时任务。Crontab是一个用于在特定时间间隔执行指定任务的工具。通过编辑用户的crontab文件,可以添加、修改或删除定时任务,以便定期执行特定的命令或脚本。

crontab -l  # 查看当前用户的crontab文件内容

crontab -e  # 编辑当前用户的crontab文件

在编辑用户的crontab文件时,可以按照特定的格式添加定时任务。每一行代表一个定时任务,格式一般为:

分钟 小时 日期 月份 星期 要执行的命令

第二种方式:使用systemd定时器

使用systemd定时器可以更好地管理系统中的定时任务,提高系统的效率和可靠

一、systemd可以使用定时器(Timers)来实现定期执行任务的功能。

要使用system的定时器,关键是要创建一个定时器单元文件和一个配套的服务单元文件,然后启动这些单元即可

1.创建单调定时器

单调定时器适合按照相对时间的计划任务管理,这里以每三秒执行写入hello world文件为例,要求开机后立即开始执行。

(1)编写一个定时器单元文件,将其命名为Hello.imer,保存在/etc/systemd/system 目录中。

内容如下: 

[Unit] 
Description=Run boot backup weekly and on boot [Timer] 
OnBootSec=1s
OnUnitActiveSec=13s
[Install 
WantedBy=multi-user.target 

(2)编写一个配套的服务单元文件,可将其命名为boot_backup.service,保存在/etc/systemd /system目录中。内容如下: 

[Unit] 
Description=Backup boot [Service] 
Type-simple 
ExecStart=/usr/local/bin/Hello

这里注意,要将Type值设置为simple(也是默认值)。如果设置为oneshot, 该服务单元仅执行一次,之后就会退出,系统会关掉定时器。ExecStart定义要执行的任务。

此处的“ExecStart=”后面接任务脚本路径。

查看/etc/systemd/system下的两个Hello单元文件是否写好


(3)编写任务脚本文件,内容如下: 

#!/usr/bin/bash 
echo "Hello world" > /usr/local/bin/Hello (/path to Hello)

还应授予该脚本执行权限,可执行以下命令来实现: 

chmod +x /usr/local/Hello

(4)由于创建新的单元文件,执行systemctl daemon-reload命令重新装载单元文件。
(5)分别执行以下命令使新建的定时器能开机启动,并启动定时器: 

systemctl enable boot _backup.timer 
systemctl start boot backup.timer 

启动的是.timer文件,而不是.service文件。因为配套的service文件由timer文件启动。
可以执行以下命令列出定时器: 

systemct list-timers 

systemd定时器是systemd服务管理器的一部分,与系统其他组件集成紧密,而cron是

一个独立的工具,相对独立于系统服务管理。systemd定时器的精度更高,可以实现秒

级的精确定时,而cron通常只能实现分钟级的定时。systemd定时器的配置相对简单,

使用systemd提供的命令和工具可以方便地管理定时任务,而cron的配置文件相对复

杂,需要熟悉cron表达式等概念。systemd定时器可以更好地处理系统启动、重启等情

况下的定时任务,保证任务的可靠执行,而cron在系统重启后可能需要手动重新加载定

时任务。总的来说,选择使用systemd定时器还是cron工具取决于具体的需求和系统环

境,两者都有各自的优势和适用场景。

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 定时器 timer_list 是一个内核数据结构,用于管理内核中的定时器。它是一个双向链表,每个节点表示一个定时器timer_list 的定义位于 `<linux/timer.h>` 头文件中。 每个 timer_list 节点的定义如下: ```c struct timer_list { struct list_head entry; // 定时器节点的链表指针 unsigned long expires; // 定时器的到期时间 void (*function)(unsigned long); // 定时器回调函数 unsigned long data; // 传递给回调函数的参数 struct tvec_base *base; // 定时器所属的时间轮 int slack; // 定时器的松弛时间 }; ``` 其中,`entry` 是一个 `list_head` 结构,用于将节点连接到定时器链表中。`expires` 表示定时器的到期时间,以 jiffies 单位表示。`function` 是定时器的回调函数,在定时器到期时被调用。`data` 是传递给回调函数的参数。`base` 表示定时器所属的时间轮,`slack` 是定时器的松弛时间,用于处理定时器的精度。 在使用 timer_list 时,可以使用以下函数进行初始化和操作: - `timer_setup(struct timer_list *timer, void (*function)(unsigned long), unsigned int flags)`:初始化一个定时器,并指定回调函数和标志。 - `init_timer(struct timer_list *timer)`:初始化一个定时器。 - `add_timer(struct timer_list *timer)`:将定时器添加到定时器链表中。 - `del_timer(struct timer_list *timer)`:从定时器链表中删除定时器。 - `mod_timer(struct timer_list *timer, unsigned long expires)`:修改定时器的到期时间。 这些函数可以通过 `<linux/timer.h>` 头文件中的宏来调用。通过操作 timer_list,可以实现在 Linux 内核中的定时器功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值