Linux创建systemd定时器

 1.Systemd定时器

       Systemd定时器是Systemd服务管理器中的一种机制,用于在Linux系统上按计划执行任务或服务。它们是基于时间的触发器,可以在指定的时间点执行任务,也可以按照一定的时间间隔执行任务。
       Systemd定时器由两部分组成:定时器单元(.timer文件)和关联的服务单元(.service文件)。定时器单元指定何时执行任务,而关联的服务单元定义了要执行的任务或服务。
以下是Systemd定时器的一些关键概念和用法:

定时器单元(.timer文件):


OnCalendar=:指定任务执行的日历时间,可以是具体的日期时间、每天/每周/每月的某个时间、每隔一定时间执行等。
Persistent=:指定是否在系统启动时立即触发任务,默认为false,即只在计划的时间触发任务。
AccuracySec=:指定定时器的准确性,即触发时间的允许偏差,默认为1分钟。

服务单元(.service文件):


定义要执行的任务或服务,可以是Shell脚本、系统命令、应用程序等。
Systemd定时器的常用命令:
systemctl list-timers:列出当前系统上所有的定时器及其状态。
systemctl start your-timer.timer:手动启动指定的定时器。
systemctl stop your-timer.timer:停止指定的定时器。
systemctl enable your-timer.timer:将定时器设置为开机自启动。
systemctl disable your-timer.timer:禁用定时器的开机自启动。

     使用Systemd定时器可以实现诸如定时备份、定时执行任务、定时启动服务等功能,是Linux系统中管理任务调度的强大工具之一。

2.创建单调定时器

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

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

vim /etc/systemd/system/boot_backup.service

[Unit]
Description=Backup boot
[Service]
Type=simple
ExecStart=/bin/bash /usr/local/bin/boot_backup

[Unit] 部分:
Description=Backup boot:描述这个服务的用途,即备份引导(Boot)。

[Service] 部分:
Type=simple:指定服务的类型为简单类型,这意味着Systemd不会在启动服务后跟踪其主进程的状态,而是假设主进程在启动后一直运行。
ExecStart=/bin/bash /usr/local/bin/boot_backup:定义服务启动时要执行的命令。这里使用了/bin/bash解释器来执行/usr/local/bin/boot_backup脚本或可执行文件,即在启动时执行备份引导的操作。

(2)编写一个定时器单元文件,可将其命名为 boot_backup.timer,保存在etc/syetemd/system目录中

vim /etc/systemd/system/boot_backup.timer

[Timer]
OnUnitActiveSec=3s
AccuracySec=1us
[Install]
WantedBy=multi-user.target

[Timer] 部分:
OnUnitActiveSec=3s:定义了定时器在激活(即启动)时要等待的时间长度。这里设置为3秒,表示在定时器激活后3秒触发定时器,然后开始执行与之关联的服务单元。
AccuracySec=1us:指定了定时器的准确性,即触发时间的允许偏差。这里设置为1微秒(1us),表示定时器的触发时间允许的最大偏差为1微秒。

[Install] 部分:
WantedBy=multi-user.target:定义了定时器所属的系统目标(target)。这里设置为multi-user.target,表示定时器将在系统进入多用户模式时(即完成基本启动但未进入图形界面时)启动。

(3)编写任务脚本文件,这里是一个简单的引导区备份脚本usr/local/bin/boot_backup仅供参考

创建shell脚本

vim /usr/local/bin/boot_backup

 内如如下

#! /usr/bin/bash
echo `date` >> /tmp/mylog.txt

通过该脚本将更新日期保存在/tmp/mylog.txt

提高脚本权限

给 Shell 脚本设置 chmod +x 的目的是为了使其具有执行权限。这样,你可以直接运行该脚本而不需要在命令前加上 bash 或者 sh 这样的解释器。这种设置使得脚本更加方便使用,尤其是当你希望其他用户或系统自动任务能够执行该脚本时。

 chmod +x /usr/local/bin/boot_backup

(4)执行systemctl daemon-reload 命令

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

(5)设置开机自启动、

       定时器服务设置开机自启是为了确保在系统重启后该定时器服务能够自动启动并按照预定的计划执行任务。这对于需要定期执行的任务非常重要,因为如果定时器服务不设置开机自启,那么在系统重启后就需要手动重新启动定时器服务,并重新设置定时任务,这样会增加管理和维护的工作量,也可能导致任务错过执行时间。

      通过设置开机自启,定时器服务会在系统启动时自动启动,保证了任务的及时执行。这对于诸如定期备份、日志清理、定时报告生成等任务非常有用,可以提高系统的可靠性和稳定性。

systemctl enable boot_backup.timer

 启动服务

systemctl start  boot_backup.timer

 (6)开启一个新的终端用于检测运行

这个命令会实时监视 /tmp/mylog.txt 文件的内容,并将新添加到文件末尾的内容实时输出到终端,以便你可以实时查看文件的更新情况。这在调试程序、查看日志或监视某个正在写入的文件时非常有用。

计划任务管理

Linux 可以将任务配置为在指定的时间点、时间区间,或者系统负载低于特定水平时自动运行,这实际上是一种进程的调度启动。这种计划任务管理作为一种例行性安排,通常用于执行定期备份、监控系统、运行指定脚本等工作。计划任务有两类,一类是周期性执行,另一类是执行一次之后就不再执行。与多数 Linux 版本一样,Cent0s 提供 cron、at 和 batch等计划任务管理工具。

使用cron安排周期性任务

1.准备shell脚本

vim time.sh

#! /bin/bash

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

2.编写内容

Crontab -e编写

* * * * * /root/time.sh

五个星表示每分钟执行一次

3.启动服务

Systemctl start crond

Systemctl status crond

4. tail 查看日志写入

at

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

1.创建timer.sh

编写内容

#/bin/bash

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

并设置两分钟后执行一次

使用atq查看已添加任务

2.查看执行结果

tail -f /tmp/mylog.txt

  • 37
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值