创建定时器

 文章目录

  • 概要
    • 技术名词解释
    • 实验内容
    • 创建步骤

概要

        在 Linux 系统中,设置定时任务是一项常见且重要的操作,它有助于自动化执行各种任务,如系统维护、备份和日志审计。Linux 提供了多种工具来安排这些自动化任务,其中最常用的三种方法是 Cron、At 和 Systemd Timers。
1. cron

         Cron 是 Linux 中最传统且广泛使用的定时任务工具。它允许用户定义周期性执行任务的时间表。Cron 通过一个称为 crontab(Cron table)的表格来管理这些任务。用户可以在 crontab 文件中指定任务以及它们应该运行的时间和日期。

        特点:非常适合于需要定期、重复执行的任务。 

        用法:编辑 crontab 文件,输入时间和日期以及相应的命令。

        时间格式:Cron 使用特定的时间格式,由五个字段组成(分钟、小时、日、月、星期)。

2. at

        At 命令用于安排一次性任务。与 Cron 不同,At 适用于只需执行一次的任务。这些任务在指定的未来某个时间点执行。

        特点:最适合于那些不需要重复执行的任务。

        用法:使用 at 命令,后跟执行任务的具体时间。之后,输入要执行的命令,然后结束输入。 

        时间格式:At 允许多种时间格式,例如具体时间点或“现在之后”的时间表达方式。

3. systemd Timers

         Systemd Timers 是 Systemd 的一部分,Systemd 是现代 Linux 系统的初始化系统和服务管理器。Systemd Timers 提供了一种与 Systemd 集成的方式来安排任务。

         特点:提供了比 Cron 更灵活的定时机制,允许基于事件的触发。

        用法:需要创建两个文件:一个 .service 文件定义任务,另一个 .timer 文件定义何时触发服务。

        时间格式:Systemd Timers 使用自己的时间表达格式,可以是相对时间也可以是固定的日历时间。

每种方法都有其独特的优势和适用场景。

技术名词解释

1.Systemd定时器

         Systemd定时器是一种在Linux系统下用于在特定时间或间隔执行任务的工具。它基于事件驱动,可以在指定的时间或间隔触发一个事件,并执行相应的任务。Systemd定时器为系统管理员提供了一种简单的方法来安排和管理后台进程,使得他们能够更轻松地管理和维护服务器。

        从触发时间上看,Systemd定时器可以分为单调定时器和实时定时器。单调定时器是从一个特定的时间(如系统启动或systemd服务单元执行的开始时间)开始后过一段时间触发。而实时定时器则是在某个特定的时钟时间触发,类似于cron定时任务。这两种定时器可以满足不同要求的任务。

        使用Systemd定时器,管理员可以设定任务的执行频率,如每小时、每天或每周执行一次,或者设置任务在特定的时间点执行。此外,Systemd定时器还可以配合其日志工具进行除错,并设置内存和CPU的使用额度。

        总的来说,Systemd定时器是Linux系统中一个强大且灵活的工具,可以帮助管理员有效地管理和安排任务的执行。

        单调定时器在Linux系统中的作用是从一个特定的时间(如系统启动或systemd服务单元执行的开始时间)开始后,经过一段预设的时间后触发事件或执行任务。与实时定时器不同,单调定时器不依赖于时钟时间,而是基于系统或任务的相对时间。

2.单调定时器

       单调定时器是指从一个特定的时间点开始,经过一段时间后触发执行定时任务的定时器。这种定时器通常用于系统启动或者systemd服务单元执行的开始时间等场景。在systemd中,单调定时器是以.timer为后缀名的systemd单元文件,用于控制.service文件或事件。单调定时器遵循OnTypeSec=的形式,其中OnBootSec和OnActiveSec是常用的单调定时器。

        单调定时器在实际应用中有广泛的用途,例如在游戏的开发中对时间的控制,或者在每天的特定时间点执行某些任务,如收邮件等。这种定时器的主要特点是它不受系统时钟变化的影响,只根据设定的时间间隔来触发任务,因此具有更高的稳定性和可靠性。

3.服务单元文件

       服务单元文件(Service Unit File)在Systemd中是一个用于配置和描述服务单元的文本文件。每个服务都对应着一个Systemd Service单元配置文件,该文件描述了服务的属性、依赖关系和启动脚本等信息。

       在Systemd中,一个单元(Unit)是一个抽象的概念,它可以代表系统上的各种任务或资源,例如系统服务、挂载点、设备等。服务单元(Service Unit)就是用于表示系统服务的单元类型,如网络服务、数据库服务等。

       服务单元文件通常包含了服务的启动命令、环境变量、工作目录、用户权限等配置信息,以便Systemd能够正确管理和控制服务的运行。通过编辑服务单元文件,你可以定义服务的启动顺序、依赖关系、重启策略等,以满足不同的业务需求。

       总之,服务单元文件是Systemd中用于配置和管理系统服务的重要文件,它使得服务的部署、监控和管理变得更加方便和灵活。

4.定时器单元文件

        定时器单元文件是systemd服务管理器的一部分,用于管理和配置定时任务。它定义了调度表,决定了何时触发某个服务单元文件的执行。

       在Systemd中,单元(Unit)是一个抽象的概念,它可以代表系统上的各种任务或资源,而定时器单元和服务单元就是其中的两种。定时器单元和服务单元共同协作,以实现定时任务的功能。其中,定时器单元文件定义调度表,而服务单元文件定义执行的任务。

        通过定时器单元文件,用户可以设定特定的时间或时间间隔来触发某个服务单元的执行。这种机制使得系统能够按照预定的时间计划自动执行各种任务,如定期备份、清理临时文件等。

       总的来说,定时器单元文件在Systemd中扮演着重要的角色,它使得定时任务的配置和管理变得更加方便和灵活。

实验内容

1.systemd创建单调定时器

2.systemd创建实时定时器

3.使用cron安排周期性任务

4.使用at工具安排一次性任务

创建步骤

创建单调定时器

1. 编写任务脚本文件,这里是一个简单的备份脚本/root/syslog.sh,仅仅用于示范,内容如下:

#! /bin/bash
echo `date` >> /root/syslog.txt

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

chmod +x syslog.sh

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

[Unit]
Description=date daemon

[Service]
Type=simple
ExecStart=/root/syslog.sh


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

3.编写一个定时器单元文件,可将其命名为syslog. timer, 保存在/etc/systemd/system目录中。内容如下:

[Unit]
Description=Run syslog every second

[Timer]
OnUnitActiveSec=3s
AccuracySec=1us

[Install]
WantedBy=multi-user.target

4.由于创建新的单元文件, 执行 systemctl daemon-reload 命令重新装载单元文件

systemctl daemon-reload

5. 分别执行以下命令使新建的定时器能开机启动, 并启动定时器:

启动的是. timer文件, 而不是. service 文件。因为配套的 service文件由 timer 文件

查看syslog.timer服务状态

systemctl status syslog.timer

6.查看是否成功

tail -f syslog.txt

创建实时定时器

实时定时器适合按照日历时间的计划任务管理,这里也以一个定期备份任务为例,要求 每周执行一次(如时间为周日2点),且上次未执行就立即执行。实现步骤与上述单调定时器 一样,只是将定时器单元文件修改即可。其内容符合实时定时器,修改如下:

[Unit]
Description=Run syslog weekly
[Timer]
OnCalendar-sun,02:00 Persistent-true
[Install]
WantedBy=multi-user.target

使用cron安排周期性任务

创建一个名为date_output.sh的shell脚本文件,并给它写入以下内容:

该脚本会获取当前的日期,并将其追加到/root/outputfile.txt文件中。当cron任务执行date_output.sh脚本时,脚本会将当前的日期追加到/root/outputfile.txt这个文件中。如果这个文件不存在,>>操作符会创建它。

给脚本执行权限

配置cron任务

使输入crontab -e命令来编辑Crontab文件。如果你是第一次使用Cron,这个文件可能不存在,那么crontab会为你创建一个。添加以下行来设置每分钟运行一次date_output.sh的shell脚本文件。

保存并退出编辑器

使用 crontab -l 命令查看Cron任务列表。

查看crond服务状态

查看文本输出结果

使用 at 命令来设置定时任务

查看atd服务状态

使用 at 命令设置定时任务每3分钟后执行任务,任务的输出就会被写入到 /root/output.txt 文件中,稍后查看这个文件来获取结果。

 这里,echo 'date' 是要执行的命令输出当前日期和时间,at now + 3 minutes 指定了任务应该在3   分钟后执行。

查看 at 队列中的任务

    这将列出队列中所有待执行的任务及其相关的作业ID和时间。

等待任务执行并查看结果

  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值