linux计划任务crontab使用方法

Windows下有计划任务,Linux同样有这样的定时执行软件实现相同功能,而且更加简单。在Linux中通常通过crontab来实现这个功能。crontab其实分为两个部分cron和cron table,cron是计划任务的核心程序,而table是用于管理这些任务列表的工具。对应的,在系统中crond服务用来维护cron,可以使用service crond start/stop/restar/reload来命令服务状态。接下来就介绍一下contab的使用吧。

安装crontab和启动服务

yum install vixie-cron
yum install crontabs
service crond start

使用crontab

crontab -l  #查看已有的任务列表
crontab -e  #打开任务列表编辑器,修改任务列表,具体怎么编辑下一部分讲
service crond reload  #重新载入任务列表

crontab任务列表

当使用crontab -e打开任务列表编辑器时,按照vi的操作方式进行操作。每行代表一个计划,这个计划包含时间和要执行的任务,一共6列,前面5列和时间相关,最后一列是一个执行任务的语句(不是一个单词,可以是有空格的命令),执行该任务的用户是root(crond服务的用户)。

下面来详细讲解一下这6列:

0 * * * * servie httpd restart
① ② ③ ④ ⑤ -------⑥------------

上面这个任务表示,在每一个整点重启httpd服务。

① 表示每个小时的第n分钟,取值[0,59],比如填写10,就是表示每个小时的第10分钟;
② 表示每天的第n个小时,取值[0,23],比如填写3,表示每天的3点钟,如果配合上面的10,就表示每天的3点10分会执行这个任务;
③ 表示每月的日期,根据不同的月进行填写,[1,31],比如2月,就没有30,31
④ 表示月份,取值[1,12]

上面这四个项合起来,就可以计划一个确定时间的计划,比如3月16日 16:16,这个时间安排一个任务就可以实现了。

⑤ 表示星期几,取值[0,6],0表示星期天,一般星期和日期不能同时出现,比如星期填写6,就可以表示3月的每个星期6这样的时间,如果和日期一起用,就会出现冲突,因为日期对应的星期可能不是我们填写的星期,当然,如果你确定的话,填写也没关系。

⑥ 表示要执行的任务内容,相当于一个Linux命令,就像上面例子里面的service httpd restart,也可以是具体的某个可执行文件,比如.sh文件

其他格式解释:

  1. ,号表示一起使用,比如上面例子里,可以改成0,30 * *……,0,30的意思就是每小时的第0分钟和第30分钟会执行这个命令
  2. -号表示一个区间,比如上面的改为0 3-5 * * *3-5表示3,4,5,也就是说3-5之间任何一个可选的值都会用上
  3. *号表示这个位置的任何一个有效数字都会使用,比如上面的例子里,第一列是0,其他全是*,意思就是第二列[0,23]这24个数字全部用上
  4. /号表示“每隔”,和逗号连接号意义不同,比如我们改为0 */2 * * * */2表示每隔两个小时执行一次,斜杠前面的值表示先限定一个区间,比如23-6/2表示在晚上11点到早上6点之间,每隔两个小时

我们来举一个例子,比如我希望服务器每隔15分钟访问一个URL,我们可以在contabs中加入如下任务:

*/15 * * * * curl http://yourdomain/uri

这样就可以实现一个基于URL的定时任务啦

2016-08-25

已有1条评论
  1. […] 在Linux中,我们使用crontab来定时执行某些任务。在《linux计划任务crontab使用方法》一文中我已经详细讲了crontab的用法,就不再赘述如何创建定时任务。 […]