消息关闭
    暂无新消息!

Linux任务调度服务:crond

博文作者 : 银河使者2017-06-01发布

     在Linux下,定时完成某些操作的功能往往是必须的。实际上,在Linux系统本身也有很多定时操作,如缓存数据到硬盘、日志清理等。这类系统本身要定时执行的操作称为系统任务调度。系统调度配置文件在为/etc/crontab,使用vi /etc/crontab命令可以编辑该文件,不过系统调度并不在本文的讨论范围内,本文主要介绍如何添加配置自己的调度操作,也就是用户任务调度。

    现在先说明下本文要使用的命令。其实,本文只需要使用一个命令,这就是crontab,不过这个命令并不是用来调度的,而是用来提交调度任务的,真正负责调度的是crond服务,这个服务在Linux启动时就自动运行了,可以使用pgrep crond命令查看crond服务的进程ID,如果没运行,就执行以下crond命令即可,但要注意,不要执行多次crond命令,这个命令并不会检测是否已经存在了crond实例,因此,如果执行多次crond命令,在系统中就会存在多个crond实例,这样,在进行调度时,同一个任务就会执行多次了。

    crond任务调度的时间粒度是1分钟,也就是说,我们进行任务调度时,频率最大只能是1分钟调用一次。

    OK,前面讲的内容只是本文的前传,现在进入正题。如果向crond服务提交自己的调度任务呢?答案就是使用crontab命令。 调度任务需要写在一个文本文件中(文件可任意命名),然后通过crontab命令指定,如crontab file,其中file就是调度文件名,这样crontab就将file中定义的调度任务提交给了crond服务,该服务每隔1分钟会检查是否有应该执行的调度任务,如果有就立即执行。

    现在的问题就集中到一点了,调度文件应该如何写呢?

    调度文件的语法是每一行是一个调度任务,如果要定义多个调度任务,就需要写多行。每一行的语法分为如下6部分,每一部分用空格隔开。

minute   hour   day   month   week   command

    从这6部分可以看出,前5部分用来指定时间,也就是什么时候执行任务,最后一部分就是要调度的任务,可以是任务的命令。

    现在的关键是前5部分都代表什么,从前面的定义可以看出,前5部分分别设置分钟、小时、天、月、周(星期几)。那么这些时间具体如何控制任务调度呢?

    这5部分的每一部分都可以设置如下几类值。

    1. 具体数值,如minute = 5,就表示在任何时间的第5分钟执行一次,如13:05,16:05,都会执行

    2.  星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作

    3. 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

    4. 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

    5. 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

    每一部分也是有取值范围的,图1是具体的取值范围。其中week表示星期几,0或7表示星期日。

1

                                                   图1  时间的取值范围


下面让我们看几个具体的例子

 

每5分钟执行一次sh test.sh命令

*/5 * * * * sh test.sh

 

每天的23:30执行 sh clear.sh命令

30 23 * * * sh clear.sh

 

在23点到第二天6点,每小时的25分、40分和55分访问http://127.0.0.1/put.php

25,40,55 23-6 * * * curl http://127.0.0.1/put.php

 

实例8:每周六、周日的2: 30重启smb

30 2 * * 6,0 /etc/init.d/smb restart

 

OK,现在我们已经了解了如何编写调度文件,现在新建一个文本文件,并输入相应的调度任务,假设该文件名是scheme,那么现在执行crontab scheme,然后crond服务就会按调度执行的时间去执行调度任务。

    要注意的是,如果用crontab命令指定其他文件,那么将覆盖前面的调度文件(如scheme),会启用新文件中的调度任务。可以使用crontab -l查询当前的调度任务,使用crontab -e命令编辑当前的调度任务,使用crontab -r取消当前的调度任务。

    下面再介绍一些相关的命令 

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置


crontab -u//设定某个用户的cron服务

crontab -l//列出某个用户cron服务的详细内容

crontab -r//删除没个用户的cron服务

crontab -e//编辑某个用户的cron服务


查看crontab服务状态:

service crond status

 

手动启动crontab服务:

service crond start

 

加入开机自动启动:

chkconfig –level 35 crond on



0个评论

暂无评论!