17.1 前言
在上一章节我们简单了解了Linux软件管理的一些相关操作,而在这张内容,我们来讲一下计划任务!计划任务,本质上来说就是特定的时间执行一些命令,因此被称为计划任务,我们接下来就具体来了解一下吧:
17.2 计划任务详解
作用:
定时自动完成特定的工作计划任务分类有两种,一次性计划任务和周期性重复计划任务,具体分类如下:计划任务的分类:
- 一次性的计划任务
例如下周三对系统的重要文件备份一次
- 周期性重复计划任务
例如每天晚上12 : 00 备份一次17.2.1 一次性计划任务:
命令有两个
- at
- batch
因为篇幅原因,这里我们就只讲at,batch在这里不做讲解,还请各位谅解。at命令:
at命令是一次性定时计划任务,at的守护进程atd回忆后台模式运行,检查作业队列来运行,默认情况下,atd守护进程会每隔一分钟会检查at作业队列,如果在当前时间有作业时,会检查作业运行时间,如果时间与当前时间匹配,那么运行此作业。at命令是一次性定时计划任务,执行完一个任务后就不会再执行此任务了因此,在使用at命令的时候,必须保证atd进程启动,否则不会运行计划任务!!!检查atd命令是否启动:ps -ef | grep atd
我们看结果:我们发现,这里我们并没有启动atd进程,因此我们需要手动启动atd进程,手动启动atd进程如下:atd
我们现在再来查看atd进程
启动成功。
(注意:这里新系统可能没有at命令,因此需要安装at命令,保证可以使用一次性计划任务)
在启动atd命令后,我们就可以正常使用at命令了
at命令格式:
at [选项][时间] ctrl+d保存退出
具体选项如下:
选项:
- -q:指定任务计划的队列编号
- -l:显示尚未执行的计划任务(等同于命令atq)
- -d num:删除指定编号的计划任务(等同于命名atrm)
- -c num:显示指定编号的计划任务的具体的命令
- -f file time:从文件中读取要执行的操作
这里我们直接通过例子来进行讲解:
-l选项举例
我们这里先创建一个一次性计划任务。在十分钟后分别执行查看根目录以及查看etc下的passwd命令,
命令格式如下:
at now+10min at> ls / at> cat /etc/passwd
输入完成后看结果
这里代表已经有一个计划任务将于2024年6月12日5:03进行执行,我们来查看该任务
命令:
at -l
看执行结果:
输出结果详解1 Wed Jun 12 05:03:00 2024 a root 编号 计划任务的执行时间 队列编号 发起计划任务的用户
现在我们等结果就可以了
现在他们告诉我们root里面有个文件,我们进去看一下
好了,这里就说明执行成功了,下一个。
-f的举例:
该选项类似于一些编程语言的函数也有,通过指定时间去调用指定文件文件里面的命令,具体操作如下:
- 创建文件
- 读取命令
我们通过举例来讲解该选项:例:在一分钟后利用1.txt中的命令去执行查看根目录的命令第一步:在根目录下创建文件1.txt,文件内容为ls /(这里不做演示,只看结果)第二步:读取1.txt中的命令,在一分钟后执行命令如下:at -f 1.txt now+1min
我们来看反馈:
接下来我们等待一分钟之后的结果:邮件发送,我们来查看邮件执行成功,ok,完成(这里需要注意, 所有的查看命令的反馈结果都存放于用户的邮件下,邮件地址为/var/spopol/mail下的用户同名的一般文件中,因此需要查看邮件!!)
17.2.2 周期性任务计划
周期性任务计划也有两个命令:
- crontab
- anacron
这里我们只对crontab命令做解释,还请各位读者谅解
crontab命令:
作用:实现周期重复的计划任务这里我们需要注意的是,我们需要去启动一个服务,crond服务,只有在启动该服务之后才可以完整使用该命令。启动crontab的服务:service crond start 启动自动消失 chkconfig crond on 自动启动
这里需要注意:我们或许需要安装crontab以及crond才可以正查使用该任务计划!!
接下来我们来介绍一下crontab命令
这个命令如果你是yun安装的,他会在/etc下有一个名为crontab的介绍文件,具体如下:
这里会介绍该命令的格式,各个符号的作用以及其他用途,前面五个*分别表示
- 分钟
- 小时
- 日
- 月
- 周
之后直接跟命令,具体如下:
* * * * * 命令
(这里我们要注意,crontab后面必须加短选项e才可以进行执行!!!)
crontab的时间表示格式:
- 分钟:0-59任意数字
- 小时:0-23任意数字
- 天:1-31任意数字
- 月:1-12任意数字
- 周:0-7任意数字
- *:表示任何时间,例如:每天的7:30就是: 30 7 * * *
- /n:表示每个n单位的时间,例如:每隔10分钟:*/10 * * * *
- -:表示一个连续的范围,例如每天的7:30,8:30,9:30:30 07-09 * * *
- 表示离散的时间点,例如每天的7:30,10:30,14:30:30 07,10,14 * * *
crontab选项:
- -e:执行、修改任务计划(本质上就是用vi修改/var/spool/cron/username)
- -l:显示用户的计划任务列表
- -u username:查看指定用户的计划任务(结合-l使用)
- -r:删除当前用户的全部计划任务
多于话不说,举例说明例子:利用周期性计划任务,每分钟创建一个以完整 “ 年月日 .log” 命名的文件第一步:进入周期性计划任务编辑系统touch -e
第二步:
编辑该文件:
*/1 * * * * touch /`date \+\%F`
第三步:
查看是否写入
crontab -l
看结果:
第四步:
去根下查看是否执行成功
ok,完成!
这里我们要注意哦的是,在执行命令是如果出错,他是不会进行反馈的,因此建议先运行一遍再去执行该命令!
/etc/con.deny黑名单文件(文件中出现的用户不能创建计划任务)最后我们出一些理解题,让大家自行理解!30 3,12 * * * 30 */6 * * * 30 8-12/2 * * * 45 4 1,10,22 * * 30 21 * * * 0,30 18-23 */7 1-6 *
- 每个月十二号的三点三十分执行该命令
- 每隔六天的一整天的半点执行命令
- 每个月的二号的八点到十二点的半点执行该命令
- 每个月的一号,十号,二十二号的四点四十五分执行该命令
- 每个天的晚九点半执行该命令
- 一到六月内,每隔七天的十八时到二十三时的整点和半点执行该命令
大家可以去选中查看答案,今天的内容就到这里了,感谢各位观看!如果有不足和错误之处还请各位读者联系指正!再次感谢各位的观看!我们下期再见!