任务或作业:计划的命令
at:计划一次性任务
一个系统守护进程(atd),它有一组命令行工具可与守护进程进行交互;atd守护进程提供了a到z共26个队列,作业按字母排列,越往后系统优先级越低
at <timespec> :计划新作业,at会随后读取从stdin执行的命令。对于较大的命令以及错别字敏感的命令,使用来自脚本文件的输入重定向比在终端窗口中手动输入命令要简单,手动输入时,Ctrl+d可以完成输入
eg:
now +5min 相对时间,从现在起,5分钟后执行
teatime tomorrow noon midnight 模糊时间
noon +4days 从中午起,4天后
5pm august 3 2016 2016年8月3号下午5点
检查作业
atq | at –l : 查看用户待处理的作业
显示为四列:作业编号、该作业计划的日期和时间、作业所在队列、作业所有者
●普通的非特权用户只能查看和控制自己的作业,root可以查看和管理所有作业
at –c <jobnumber> :检查在执行作业时将运行的实际命令
atrm <jobnumber> :将会删除计划的作业
cron计划周期性作业
crond守护进程默认开机自启,由多个配置文件和系统范围内的文件控制的,使用户和管理员拥有细微的控制权,可以控制应执行周期性作业的确切时间
crond守护进程以邮件的形式将执行的任务结果发送给任务的所有者;
但也可以将任务执行结果重定向到/dev/null,而不让其发送到邮箱而占用资源
crontab –l 列出当前用户的计划任务
crontab -r 删除当前用户的所有计划任务
crontab -e 编辑当前用户的计划任务
crontab <filename> 删除所有作业并替换为从<filename>读取的作业,若未指定任何文件,则将使用stdin
●root可以使用-u<username> 来管理其他用户的作业
作业格式
编辑的文件每行均有一个作业,允许有空行,并且注释的行以哈希符号#开头,环境变量也可使用格式NAME=value来声明
每个作业都包含六个字段,描述了执行的时间和内容:
用户级任务
分 时 日 月 周 命令
系统级任务:
分 时 日 月 周 username 命令
前五个字段全部使用相同的语法规则
*无关紧要,始终,任何有效值
数字 指定分钟数,小时数,日期,工作日等
- 表示范围,连续时间如x-y ,x到y(包含)
, 表示列表,离散时间
*/x x表示时间间隔,每多久执行一次
还可使用三个字母的英文字母表示月份和工作日
最后一个字段包含要执行的命令。若未声明shell环境变量,则该命令由/bin/sh执行
若命令包含未转义的百分号%,则该百分号被当作新行,且%之后的所有内容将反馈到stdin中的命令
eg:
0 9 2 2 * /usr/local/bin/yearly_backup
在每年2月2号上午9点执行/usr/local/bin/yearly_backup
*/7 9-16 * Jul 5 echo “chime”
在7月每周五上午9点到下午4点间,每7分钟向作业所有者输出chime
58 23 * * 1-5 /usr/local/bin/daily_report
在每周周一到周五23时58分钟执行/usr/local/bin/daily_report
3 * * * * echo hiya
在每小时的第3分钟输出hiya (1点3分,2点3分,3点3分)
* * * * 1,5 ls /tmp
周一、周五每分钟都执行ls /tmp
10,40 * * * * ls /tmp
每小时10分,40分时执行,即每30分钟执行ls /tmp
计划系统cron作业
系统cron作业在星期几和命令字段之间定义user,用来指定作业应在哪个用户下运行
系统cron作业在2个位置定义:/etc/crontab和/etc/cron.d/*,安装cron作业的软件包应在/etc/cron.d/中放置文件才能执行安装操作,但管理员也可用此位置来将相关的作业分到单个文件中
预定义作业没小时,每天,每周和每月运行一次,这些作业将分别执行位于/etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/和/etc/cron.monthly/中的所有脚本。
●确保使位于这些目录中的所有脚本可执行,如果脚本不可只执行,则不会运行。
/etc/cron.hourly/*脚本是使用run-parts命令从/etc/cron.d/0hourly中定义的作业执行的。每日、每周和每月的作业也使用run-parts命令执行。