Systemd定时任务以及crontab、at使用概念

概要

Systemd定时任务、crontab和at都是在Linux系统中用于执行定时任务或一次性任务的工具,但它们在使用方式、配置和管理方面存在一些差异。

Systemd定时任务

Systemd是Linux系统的初始化进程,可以管理系统的各种服务,包括定时任务。Systemd的定时任务管理非常灵活,可以根据时间、事件等多种方式进行配置。它的定时任务配置文件通常以.timer为后缀,放置在/etc/systemd/system目录下。此外,Systemd定时任务还可以设置内存和CPU的使用额度,可以拆分任务,依赖其他Systemd单元完成非常复杂的任务。

crontab

Crontab是一个独立的进程,专门用于定时任务的管理。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。Crontab文件包含一系列计划任务条目,每个条目都定义了一个任务的执行时间和要运行的命令或脚本。这些任务可以按照分钟、小时、日、月和星期等不同的时间单位进行安排。Crontab支持更多的配置选项,可以实现更为复杂的定时调度。

at

AT命令有两种解释,一种是调制解调器命令语言,另一种是Windows中的计划任务命令行。在Linux中,AT命令用于在指定时间执行一次性任务。用户需要指定一个时间,然后输入要执行的命令。时间可以用多种格式指定,包括绝对时间(如10:30)和相对时间(如now + 1 hour)。

总的来说,这三种工具都为Linux用户提供了强大的定时任务管理功能,用户可以根据具体需求选择适合的工具来

整体架构流程

Systemd

单调定时器

实时定时器

对比

crontab

at

技术细节

单调定时器

  1. 编写任务脚本文件(文件名可随意)。

在/root下创建一个mytimer.sh脚本,在里面输出`date`命令,并在临时目录下创建mylog.txt记录

vim mytimer.sh

然后输入命令授予该脚本可执行权限

Chmod +x (脚本文件绝对路径)

最后bash命令启动脚本

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

[Unit]

Description=Backup boot

[Service]

Type=simple

ExecStart=/bin/bash  /root/mytimer.sh

其中

Type值为simple(默认值),如果设置为oneshot该服务单元仅执行一次,之后退出,系统关闭定时器。

ExecStart定义要执行的任务(脚本文件) /root/mytimer.sh为绝对路径,/bin/bash降低出错概率。

3.编写一个定时器单元文件,命名(*.timer)boot_backup.timer,也保存在/etc/systemd/system目录中。内容如下:

        

[Unit]

Description=Time to  Run xiaj.txt for 3s

[Timer]

AccuracySec=1us

OnUnitActiveSec=3s

Unit=/etc/systemd/system/boot_backup.service #.service路径

[Install]

WantedBy=multi-user.target

其中

OnUnitActiveSec = 3s 是每三秒运行一次。

AccuracySec = 1us 是提高精度

Unit = boot_backup.service 是关联启动

 

4..由于创建了新的单元文件,需执行命令重新加载systemd守护进程。

systemctl daemon-reload

5.执行systemctl命令,启动定时器

systemctl start boot_back.timer

6.查看运行情况

systemctl status boot_backup.timer

7.最后可通过tail 查看文件的末尾内容。

tail -f是一个非常有用的选项,它允许你实时查看文件的更新内容,特别适用于那些不断追加内容的日志文件。

tail -f /tmp/mylog.txt

可以看到以每三秒记录着。

实时定时器

  1. 在单调定时器的基础上修改,修改定时器单元文件(*.timer)

这里设定为一分钟一次

注意:在计时器单元文件中,通过在[Timer] 部分下添加“OnCalendar” 选项来指定您希望任务运行的时间。

例如:

要每天凌晨 2:30 运行该任务,您可以使用以下行:OnCalendar=*-*-* 02:30:00  

每小时运行一次:OnCalendar=hourly

要每周一凌晨 2:30 运行它:OnCalendar=Mon *-*-* 02:30:00

每 6 小时运行一次:OnCalendar=*:0/6

每天上午 10 点和下午 6 点运行:OnCalendar=10:00,18:00

  1. 运行结果:

可以看到大致以一分钟记录一次

Crontab

  1. 准备shell脚本文件

编辑脚本

vi time.sh

#! /bin/bash

echo `date` >> /tmp/mylog.txt

  1.  crontab编写内容

使用crontab -e打开crontab

开始编写定时任务

* * * * * /root/time.sh

#每分钟执行一次xia.sh,*从左往右分别是分钟(0-59)、小时(0-23)、天(1-31)、月(1-12)、星期(0-6),这里五个星表示每分钟执行一次

  1. 启动服务

systemctl start crond

  1. 运行状态

tail 查看日志写入

at

在Linux中通常使用at 在指定时间内调度一次性任务。

  1. 创建timer.sh文件

编写内容

#!/bin/bash

echo `date` >> /tmp/mylog.txt 

  1. 执行at命令进入作业设置状态,添加任务

设置为在两分钟后执行一次

  1. 查看已添加的任务

atq

  1. 查看执行结果

tail -f /tmp/mylog.txt

至此结束,感谢您的阅读

小结

对于学习Linux的人来说,掌握Systemd定时任务具有重要意义,主要体现在以下几个方面:

实用性定时任务是Linux系统管理中常见的需求,如定期备份、日志轮转、自动发送邮件等。使用Systemd定时任务,可以方便地设置和管理这些任务,提高系统维护的效率。

灵活性Systemd定时任务提供了丰富的定时规则和时间单位,使得任务调度更加灵活和精确。无论是简单的每分钟执行一次任务,还是复杂的按周、按月执行特定任务,都可以轻松实现。

可靠性Systemd作为Linux系统的初始化和管理工具,具有强大的稳定性和可靠性。使用Systemd定时任务,可以确保任务在指定的时间准确执行,减少因系统原因导致的任务失败。

集成性Systemd将定时任务和服务管理紧密集成在一起,使得任务调度和服务启动更加便捷。通过编写服务单元文件和定时器单元文件,可以方便地定义任务和调度规则,实现任务的自动化管理。

学习价值掌握Systemd定时任务有助于深入理解Linux系统的服务管理和进程调度机制。这对于学习Linux系统架构、提升系统管理技能以及进行更高级的系统编程都具有重要意义。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值