消息关闭
    暂无新消息!

Linux任务调度服务:crond

博文作者 : OriUnity官方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



6个评论

!S!WCRTESTTEXTAREA000000!E!

技术交流

  1. QQ群号码:264268059
  2. 关注订阅号(365bet中国客服电话_威廉希尔365bet_365bet欧洲足球频道起源),每天分享精彩技术文章: