单次任务计划
指在未来某个时间点执行一次预定的任务,在Linux上用到的工具为at。执行任务后将任务结果以邮件形式发送到执行该任务的用户本地邮箱。
邮件相关操作:
# mailx -s "Hello" root@localhost #回车后进入交互式界面,输入邮件内容,Ctrl+d发送
-s "STRING":邮件标题,可省略
注:可使用标准输入流指定文件内容发送,
也可以使用管道符将上一个命令的标准输出作为邮件内容发送
at命令:
用法:at [OPTIONS] TIME
选项说明:
-l: 列出指定队列中等待运行的作业,相当于atq
-d #: 删除指定的作业;相当于atrm #,#表示作业号,下同
-c #: 查看具体作业任务
-f /FILE_PATH:从指定的文件中读取任务
时间格式:
HH:MM:如23:00
now+#{minutes, hours, days}:如now+5hours
周期性任务计划
每隔多长时间,或是每到某个时间点执行指定任务。在Linux上通常使用的cron工具,其包含了三个程序包,分别是:
cronie:主程序包,包含了crond守护进程及相关工具
cron-anacron:cronie监控程序,主要负责cronie的执行状况;若cronie未按预期执行任务,则anacron会代为执行任务
crontabs:包含一些系统维护任务
cron任务分为系统任务和用户任务两类,其创建方法有所不同。
系统任务: 任务定义通过编辑/etc/crontab文件,文件内容由七个字段组成,仅管理员用户可以创建更改,其字段格式如下:
* | * | * | * | * | USERNAME | COMMANDS |
---|---|---|---|---|---|---|
分(0-59) | 时(0-23) | 日(1-31) | 月(1-12) | 周(0-7) | 用户名 | 命令 |
时间表示规则:
1、给定具体值
2、该字段对应时间上的所有值,如:
* * * * *,每分钟执行一次后面的命令
3、离散、连续取值,如:
0,30 5-7 * * *,每天的5点到7点三小时内的每到0,30分时执行一次
4、步长取值,即每多少时间执行一次,如:
0 */4 * * *,每4小时执行一次
例:每周一,三,五的凌晨五点将/etc/fstab文件备份至/tmp目录下并以年月日信息作为文件前缀名
# vim /etc/crontab
/*
0 5 * * 1,3,5 root /bin/cp /etc/fstab /tmp/$(date +'%Y-%m-%d')-fstab.bak
*/
注:要实现秒级别的任务,可以定义每分钟执行任务,在命令中使用循环加sleep命令控制,sleep使用方法如下:
sleep #[s, m, h, d] #不给单位默认为s,例睡眠20秒:sleep 20
用户任务: 用户任务通过crontab命令实现,普通用户只能创建属于自己的任务,因此无需给定用户字段,而管理员可以为其他用户创建,可以给定用户字段。用户任务存放于 /var/spool/cron/用户名 这个文件下,但普通用户无法通过修改该文件来编辑用户任务。
crontab命令:
用法:crontab [OPTIONS]
选项说明:
-l:列出所有任务
-e:创建/编辑任务,会打开一个文本编辑界面
-u USERNAME:为某个用户编辑任务,仅管理员可使用
-r:删除所有任务
注:用户任务执行结果任然以邮件形式将执行结果发送给指定用户,也可以通过将某些命令的标准输出重定向到 /dev/null 来过滤输出信息,减少邮件内容量。