Linux计划任务


在日常工作或使用计算机时,如果我们需要在某个时间执行某项任务,或在固定周期重复执行某项任务,我们需要对系统设定计划任务;在linux系统中,我们可以使用一次性计划任务atbatch命令,或者周期性计划任务crontab

 

一、一次性任务执行:

1、命令格式:

#at [option] TIME

 

2TIME格式:

特定时间:

HH:MM其中HH为小时,MM为分钟。

MMDDYYMM/DD/YY:其中MM是分钟,DD是第几天,YY是指年份。

now+UNIT其中UNIT单位可以为minutes hoursdays weeks

 

模糊时间:

todaynoonmidnightteatimetomorrow

 

3at任务格式:

#at TIME

at> COMMAND

Ctrl+d:提交任务

 

at有作业队列:使用单个字母表示

at –latq: 查看作业队列中的待执行任务

at -datrm:删除任务。

 

任务作业执行完成后:结果会通过邮件通知给作业提交者

CentOS: 默认会安装并启动邮件服务,仅服务于本地系统;

 

#batch:功能同at,但无须为其指定时间,其会选择系统资源较空闲时执行指定的作业

 

二、 周期性任务执行:

1、安装并启动服务:

需要安装的程序包:crond

#yum install cronie

检查crond

#/etc/init.d/crond status

技术分享

    如果状态信息为“is stopped”,则需要启动crond

#/etc/init.d/crond start

检查crond开机启动:

#chkconfig –list crond

技术分享

若为非开机启动需要设置开机启动crond

#chkconfig crond on

 

2cron任务分类:

系统cron:定义在/etc/crontab

用户cron:定义在/var/spool/cron目录中,每个用户都有一个与用户名同名的文件,其功能类似于/etc/crontab

 

3crontab使用方法:

用户cron任务的定义方式:

crontab

-uusername:指定用户,无-u选项默认为当前用户。

-l:列出已经定义的所有任务

-e:打开编辑界面定义任务

       -r:移除所有任务  

 

#crontab-u USERNAME –e

 

/var/spool/cron/目录也只有root用户才可读写;普通用户可使用crontab -e命令编辑任务;

 

4crontab格式:

执行#crontab -e,会出现vim编辑器进行任务编辑;

 

格式说明:

#vim /etc/crontab

 技术分享

格式:

cron在执行任务命令时需要指定环境变量,例如SHELLPATHHOMEMAILTO等;

 

左侧表示时间,右侧为执行的命令;

每行定义一个独立的任务:

 

时间:

时间由5个数字组成,分别表示:分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)、星期(0-6)。

 

特殊符号:

*:任意数;

/#:每#个单位;

M–N:由MN

A,B,C,…A,B,C等多个数。

 

时间表示法:

1)、每个时间位都应该使用其可用的有效取值范围内的值

3 * * * * | 17 3 * * * | 7 6 5 * * | 7 6 5 4 *

 

2)、某个时间位上的*表示对应时间位的所有有效取值;

1 9 * * 3,每周三的91分。

 

3)、*/#:在对应的时间位的有效取值上每#一次;

*/3 * * * *:每3小时;

0 */3 * * *:每3小时的整点;

*/8 * * * *:每8分钟 0-590, 8, 16, 24, 32, 40, 48, 56

 

4)、某个时间位上的连续区间:-

10-50/3 * * * *:由10分至50分之间,每3分钟执行;

 

5)、离散取值:

1 7,9,13 * * *7:01,9:01,13:01

 

命令:

如果定义在cron中的任务是脚本,此脚本中的各命令查找时遵循的是cronPATH环境变量定义;因此,在命令行中测试无问题的脚本,在cron中未必;

      解决方案:

命令使用绝对路径;在脚本中开始自己定义一个专用PATH环境变量。

 

如果在crontab的用户命令中使用%,得转义,使用\%的格式;不过,如果使用单引号引起来,也可不用转义;

5 3 * * * /bin/touch /tmp/testfile-$(date+\%F-\%H-\%M-\%S)

6 4 * * * /bin/touch /tmp/testfile-$(date+‘%F-%H-%M-%S‘)

 

         执行任务:

         任务作业执行完成后:

每一次的执行结果会通过邮件通知给作业提交者;

 

丢弃邮件通知:

输出重定向:

> /dev/null

&> /dev/null

> /dev/null 2>&1

 

5、补充:

如何实现秒级别的任务:

10秒钟:

* * * * * for i in {1..5}; do echo "howdy";sleep 10; done

0

10

20

30

50

0

 

anacron: crontab的补充机制:

检查有没有过去一个有效周期未曾执行的任务,如果有,在开机后的指定时间点执行一次。


本文出自 “小马的学习记录” 博客,请务必保留此出处http://masachencer.blog.51cto.com/8683770/1663673

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。