概述
任务计划其实就是针对未来的某一刻或者是某一周期内设置要执行的工作;
任务计划分为两种:
1、一次性任务:在指定的未来的某个时间点仅执行一次任务;
命令:at batch
2、周期性任务:根据设置的时间循环工作。
命令:crontab
一次性工作调度
at命令
使用at命令时,首先其服务atd必须开启,否则无法使用此命令。
语法格式: at [-ldc] TIME
下面举例来说明at命令的用法:
1、使用at命令来设置任务:
上面的命令表示:从现在起2分钟后执行ls /tmp命令,使用快捷键Ctrl+d来结束命令输入。
at命令并不会把执行结果输出到屏幕上,而是默认给任务设置者发送邮件;每个用户被创建时系统都会默认为其创建邮箱,可以通过变量$MAIL来查看邮箱的路径,以root用户为例:
可以看到root用户的邮箱路径
查看邮箱最下面的内容即为ls /tmp的结果
在上面的at命令中使用 now + 2 minutes来指定时间,下面详细说明时间的表示方法:
绝对时间:
HH:MM:表示在今日的HH:MM时执行任务,若设置任务时已经超过了此时间,则为明天的HH:MM执行。如:02:00。
HH:MM YYYY-MM-DD:表示在某年某月某日的HH:MM执行任务。如:02:00 2015-03-25。
HH:MM[am|pm] [Month] [Date]:表示某月某日的HH:MM执行任务。
相对时间:
now + # [minutes|hours|days|weeks]:表示从现在开始再过多少时间执行任务。
模糊时间:
noon:相当于12:00
midnight:相当于00:00
teatime:相当于4:00 pm
tomorrow:明天
2、查询已经设置的at任务
第一列为任务的编号,之所以是5和6是因为之前的at任务已经执行完成;
第二列是任务执行的时间;
最后一列表示任务的执行者为root。
此命令相当于命令atq。
3、删除已经设置的at任务
删除编号为5的at任务。
此命令相当于命令atrm。
4、查看at任务的工作内容
使用-c选项可以输出任务的工作脚本,其实此参数就是将/var/spool/at/目录中与任务相对应的文件显示了出来;使用at命令设置好的任务都会以/var/spool/at/目录中自动生成一个脚本文件,如下图:
可以看到文件中a0000后的数字与任务编号相对应。
5、at的权限
at使用/etc/at.allow和/etc/at.allow两个文件来控制权限。
1、写在/etc/at.allow文件中的用户可以才能使用at;
2、如果/etc/at.allow不存在,查找/etc/at.deny文件,如果写在/etc/at.deny文件中则不能使用at,否则就有使用at的权限;
3、如果两个文件都存在,则/etc/at.allow文件生效;
3、如果两个文件都不存在,就只有root可以使用at命令。
batch命令
功能与at相同,但不需要指定时间,自动选择系统空闲时运行计划任务。
周期性工作调度
crontab命令
使用此命令必须确保crond服务是开启状态。
语法格式:crontab [-u username] [-l|-e|-r]
-e:编辑crontab的工作内容;
-u:只有root用户才能使用此参数,帮助其它用户建立任务;
-l:查阅crontab的工作内容;
-r:删除crontab的所有工作内容。
1、编辑cron任务
在第一次使用crontab -e命令进行编辑工作时,会发现这是一个空的文件,没有任何文字可供参考,那么任务怎么写呢?
系统提供了crontab的配置文件,打开/etc/crontab文件可以看到格式的说明:
文件上面的部分是定义的环境变量,这些环境变量已经在系统中都定义可以正常使用了,为什么还要在配置文件中再定义一次呢?
由于crontab定义的是周期性任务,在运行任务时并不能保证任务发起者处于系统登录状态,如果用户退出登录后,其对应的环境变量也被相应的取消了;那么任务运行的环境($SHELL),命令查找的路径($PATH)等信息就都无法读取,会造成任务的执行失败;在任务运行前先从配置文件中读取环境变量,就可以避免此问题的发生了。
文件下面的部分是crontab任务的格式说明,我们根据配置文件的信息来说明crontab任务的格式。
cron任务分为两类:
1、系统cron任务
格式:分钟 小时 天 日 周几 用户 任务
2、用户cron任务
格式:分钟 小时 天 日 周几 任务
时间的有效取值范围:
分钟:0-59
小时:0-23
天: 1-31
月: 1-12
周: 0-7,0和7都表示周日
时间通配表示:
* :对应时间的所有有效取值
,:离散时间点, 10,40 * * * * 每小时第10分钟和第40分钟
– :连续时间 10 02 * * 1-5 每周一到周五
/ :对应取值范围内每多久一次 */3 * * * * 每3分钟
例如:0 5 * * 1 表示每周一的5点钟;
* 5 * * 1 表示每周一的5:00-5:59的每一分钟
crontab的执行结果也会以邮件的形式发送到任务发起者的邮箱中。
注意:crontab命令使用-e选项进行编辑时,实际上就是编辑/var/spool/cron/USERNAME(当前用户名)文件,以root为例:
但不要直接编辑此文件进行任务订制,因为使用-e选项可以自动识别语法错误,而使用vim直接打开文件进行编辑则没有此功能。
2、查看cron任务
3、为其它用户定义cron任务
4、删除所有的cron任务
如果想要只删除某一条的任务,使用-e选项手动删除即可。
5、cron的权限
与at一样,cron也使用文件来定义用户的使用权限;
/etc/cron.allow :写入此文件的用户可以使用crontab,没有写入的用户则不可使用;
/etc/cron.deny :写入此文件的用户不可以使用crontab,没有写入的用户则可以使用;
/etc/cron.allow比/etc/cron.deny的优先级要高,同一账号在两个文件中同时出现时,以/etc/cron.allow为准。
6、日志功能
cron执行的每一项任务都会被记录到/var/log/cron这个日志文件。
anacron命令
检查有没有过去一个有效周期未曾执行的任务,如果有,在开机后的指定时间点执行一次;
查看anacrontab配置文件
配置文件中任务的四个值的含义:
period in days delay in minutes job-identifier command
过去没执行的天数 开机后第多少分钟数 工作名称 任务
此命令在生产环境中基本用不到,此处不再进一步说明。
转载于:https://blog.51cto.com/petmaster/1631776