本篇文章主要介绍了采用systemd、crontab和at三种方法,进行计划任务管理,本篇文章全程使用的Red Hat 9。
一、systemd
1、前言
为什么创建定时器?
因为某些任务需要定时执行、开机启动后执行、或者是在指定的时间执行。Systemd定时器主要分为单调定时器和实时定时器,一般以 .timer为后缀的单元文件封装一个由system的管理的定时器。常用的单调定时器有OnBootSec和OnActiveSec,一般使用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