当我们在使用linux系统的时候通常会遇到一些需要在未来的某个时刻运行系统的某些功能,这个时候我们就需要定制一些未来能够完成的任务了。定义系统能够在未来的某一时刻完成某些功能的任务,我们称之为任务计划。
通常任务计划分为两种情况,其一是在未来的某个时间点执行一次某个任务;另外一种情况就是能够周期性的执行某些任务。那在这里我们就用到了at,bacth,和cron命令了。
at和batch能够实现在未来的某个时间点执行一次某个任务、而cron则能够实现周期性的完成某些工作;
一、在未来的某个时间点执行一次某个任务。
at命令能够实现在未来的某个时刻执行一次某个任务,并且在完成任务之后以邮件的形式通知给用户。
那么接下来我们就详细的说一下这些命令的具体用法:
at 时间 指定时间
at> COMMAND 指定未来某个时间点的命令动作
at> Ctrl+d 提交定时任务
那么定制玩任务之后如何查看能:
我们使用at -l 命令查看做好的定时任务:
那么这里指定的时间有没有什么规则呢?
指定时间:
绝对时间:HH:MM, DD.MM.YY MM/DD/YY
相对时间:now+#
单位:minutes, hours, days, weeks
模糊时间:noon, midnight, teatime
那么当我们定制完任务之后的某一天突然发现我们不需要在未来执行这件任务的时候该如何撤销自己已经定制的任务呢?
这里就用到了-d选项
at -d AT_JOB_ID at -d 跟上定制任务的id号即可撤销任务
batch与at非常类似,不同的是batch不需要指定时间,batch会自动的在系统空闲的时候完成某些定制任务。
当系统用户定制了很多在同一时刻运行的at任务,那么系统在那一刻就会非常的忙碌,这样就会造成系统资源的分配不均衡。我们在定义at的时候同时也定义了黑白名单,/etc/at.allow(白名单)和/etc/at.deny(黑名单),这样既可定义能够使用at命令的用户群,剔除那些恶意使用at命令占用系统资源的用户。当黑白名单同时存在的时候,系统以白名单为准,当黑白名单同时不存在的时候,系统则只允许root用户使用at命令。
二、周期性的执行某个任务
cron自身是一个能够不间断运行的服务,但这仅适用于服务器中,为此而推出了cron命令的补充命令anacron,anacron能够实现让cron因为各种原因在过去的时间该执行而未执行的任务在恢复正常执行一次;
cron本身又分为系统任务和用户任务两种。
系统cron任务:
/etc/crontab中,共分为七个字段
分钟 小时 天 月 周 用户 任务
用户cron任务:
/var/spool/cron/USERNAME,共分为六个字段
分钟 小时 天 月 周 任务
和at一样,cron也有自己的时间有效取值范围:
分钟:0-59
小时:0-23
天:1-31
月:1-12
周:0-7,0和7都表示周日
那么我们可以通过cron -e命令来编辑和配置用户任务:
分钟 小时 天 月 周 任务
* * * * * *
其中*表示对应所有的有效取值
3 * * * * cat /etc/inittab 表示每小时的第三分钟查看一下inittab文件
10,40 02 * * 2,5 cat /etc/inittab 表示没周二周五的两点十分和两点四十分查看一下inittab文件,其中的”,”表示离散时间点。
*/3 * * * * reboot 表示每三分钟重启一次系统这里的”/”表示取值范围内的每多久一次
PS:需要注意的是cron的环境变量都需要到PATH环境变量指定的路径下去查找,因此需要注意。
用户任务的管理:
crontab
-l: 列出当前用户的所有cron任务
-e: 编辑
-r: 移除所有任务
-u USERNAME: 管理其用户的cron任务