计划任务管理

本篇文章主要介绍了采用systemd、crontab和at三种方法,进行计划任务管理,本篇文章全程使用的Red Hat 9。

一、systemd

1、前言

为什么创建定时器?
因为某些任务需要定时执行、开机启动后执行、或者是在指定的时间执行。Systemd定时器主要分为单调定时器和实时定时器,一般以 .timer为后缀的单元文件封装一个由system的管理的定时器。常用的单调定时器有OnBootSecOnActiveSec,一般使用OnCalender来定义实时定时器。这里我们就具体介绍这两种定时器的具体步骤。

2、创建单调定时器

(1)、编写任务脚本boot_backup.sh(这里是在 /root目录下创建的),这里是一个简单的重定向命令,把本来输出的结果写入mylog.txt文件里面。代码如下:

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

在这里插入图片描述
还应授予该脚本执行权限,然后查看(一定要加执行权限,不然后面会出现权限拒绝的问题),代码如下:

chmod +x /root/boot_backup.sh
ls -l /root/boot_backup.sh

在这里插入图片描述

(2)、编写定时器单元文件,可将其命名为boot_backup.timer
保存在 /etc/systemd/system目录中。代码如下:

[Unit]
Description=Run boot backup weekly and on boot

[Timer]
OnUnitActiveSec=3s
AccuracySec=1us

[Install]
WantedBy=multi-user.target

在这里插入图片描述

配置解释:
Description:介绍这个定时器的功能,用于显示和日志记录。
AccuracySec=1us:设置定时器触发的精度,这里设置为1微秒。
OnUnitActiveSec=3s:定义当定时器关联的服务单元变为活跃状态后,定时器应等待多长时间再触发。这里设置为3秒。
WantedBy=multi-user.target:指定这个定时器单元应该在哪个目标下被激活,这里指定为multi-user.target,即多用户模式。

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

[Unit]
Description=Backup boot

[Service]
Type=simple
ExecStart=/bin/bash /root/boot_backup.sh

在这里插入图片描述

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

(4)、由于创建新的单元文件,需要执行systemctl daemon-reload命令重新装载单元文件。

systemctl daemon-reload

在这里插入图片描述
(5)、分别执行以下命令使新建的定时器能开机启动(一定要设置开机自启动,不然timer文件可能会带不动service文件),并启动定时器:

systemctl enable boot_backup.timer
systemctl start boot_backup.timer

在这里插入图片描述
在这里插入图片描述
(6)、检验成果,代码如下:

tail -f mylog.txt

在这里插入图片描述

3、创建实时定时器

创建实时定时器与创建单调定时器步骤差不多,只有步骤(2)中的 [Timer] 里面的参数不一样,其他步骤一模一样。

(2)、编写定时器单元文件,可将其命名为boot_backup.timer
保存在 /etc/systemd/system目录中。代码如下:

[Unit]
Description=Run boot backup weekly and on boot

[Timer]
OnCalendar=*:0/1
AccuracySec=1us

[Install]
WantedBy=multi-user.target

在这里插入图片描述

配置解释
OnCalendar=*:0/1:设置要运行任务的实际时间,使用的是绝对时间。
*:0/1 这个部分,我们可以拆分开来看:
*:通常代表任意值,可能指的是任意小时。
0 :指的是分钟数,这里是0分。
/1:表示每隔1个单位触发一次。在这里,由于前面是分钟数,所以它是说每隔1分钟触发一次。
所以,整体来说, [Timer] OnCalendar= * :0/1 这个设置的意思可能是:每小时的0分开始,每隔1分钟触发一次定时器。

每改一次单元文件,需要执行systemctl daemon-reload命令重新装载单元文件,重新启动boot_backup.timer

systemctl daemon-reload
systemctl restart boot_backup.timer

结果展示:
在这里插入图片描述

二、crontab

1、前言

使用crontab命令定义任务调度,-e用于编辑用户的cron调度文件;-l用于显示cron调度文件的内容;-r用于删除用户的cron调度文件。

2、步骤

(1)、输入以下命令来编辑当前用户的crontab文件(可能是vi、nano):

crontab -e

(2)、在文件末尾添加以下行来设置每隔1分钟执行一次脚本(在创建单调定时器是步骤(1)中的脚本):

* * * * * /root/boot_backup.sh

在这里插入图片描述
(3)、输入以下命令查看设置的调度任务:

crontab -l

在这里插入图片描述

(4)、保存并关闭文件。如果你使用的是vi编辑器,按ESC,然后输入: wq! 并按Enter。如果你使用的是nano编辑器,按Ctrl + O保存,然后按Ctrl + X退出。

(5)、查看结果
在这里插入图片描述
(6)、如果需要删除任务,输入以下命令(这条命令会删除所有的调度任务,如果只需要删除一个或几个还需输入crontab -e命令进入编辑界面删除):

crontab -r

三、at

1、前言

2、步骤

(1)、输入以下命令,查看atd服务是否正在运行(atd是at命令的守护进程):

systemctl status atd

在这里插入图片描述
如果没有运行,可以输入以下命令启动它:

systemctl start atd

(2)、输入以下命令来设置每隔1分钟执行一次脚本(在创建单调定时器是步骤(1)中的脚本):

echo 'bash /root/boot_backup.sh' | at now + 1 minutes

在这里插入图片描述
(3)、输入以下命令来查看未执行的调度任务:

atq

在这里插入图片描述
(4)、查看结果。
在这里插入图片描述
(5)、如果你需要删除可以输入以下命令:

atrm 1

后面数字就是你查看任务调度的序号。

三、总结

以上就是今天要讲的内容,本文仅仅简单介绍了Redhat 9采用systemd、crontab和at三种方法,进行计划任务管理。
Tips:
(1)、对于boot_backup.sh文件一定要加执行权限
(2)、对于timer文件和service文件,前面的命名要相同,如果不同可以在timer文件里的[Timer]里面加参数 “ Unit=<你的service文件> ”
(3)、对于timer文件一定要设置开机自启动

______DU03-liguang

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值