cron job (crontab)

Cron job的时间格式 :* * * * *  分别对应 分、小时、日、月、星期

所以 */5 * * * * 表示5分钟

 

计划任务(cron job)是Magento系统中一个很有用甚至可以说必须使用的功能,而最近在网上跟人聊天发现很多Magento的使用者不知道这个功能或者知道却认为可有可无,我在这里建议各位Magento的使用者,把这个功能使用起来吧。

            在之前关于Newsletter的那篇博文我有讲到,要使新闻能按设定的时间自动发送,就必须设置好计划任务(cron job)。计划任务(cron job)简单的来说就是在系统中每隔一段时间来重复操作一件事,比如每隔多少时间清理日志,比如每天提交Sitemap给google等等。

而要设置计划任务(cron job),需要在网站运行的服务器(以linux为例)写一段脚本来定时调用网站根目录下的cron.php文件。下面是我自己使用的服务器的设置方式:

 

           

[c-sharp] view plaincopy

1.  crontab */5 * * * * /usr/bin/php -f /home/yourdomainname/public_html/cron.php  

 

 

         当然,首先你的服务器得支持cron job你才能使用crontab 这个命令,设置完的效果是服务器每隔5分钟运行一次你的网站根目录下的cron.php文件,cron.php运行时会去检查计划任务时间表中哪些任务的预定时间已经到了,如果到了就立即执行预定的任务,比如提交sitemap,并同时根据各个任务的配置文件或预先设定的任务(特指newsletter)生成新的计划任务时间表。储存这些数据的是数据库中的cron_schedule表,进这个表你会看到一个计划任务的列表

 

            要让某个功能按时运行需要在对应的config.xml中设置计划任务,指定要运行的某个类的某个方法,同样以google sitemap为例

 

        

[xhtml] view plaincopy

1.  <crontab>  

2.         <jobs>  

3.             <sitemap_generate>  

4.                 <run>  

5.                     <model>sitemap/observer::scheduledGenerateSitemaps</model>  

6.                 </run>  

7.             </sitemap_generate>  

8.         </jobs>  

9.     </crontab>  

 

        你可以在Sitemap/Model/Observer.php文件中找到scheduledGenerateSitemaps这个方法,这个方法的作用就是向google提交sitemap。同理当你自己的模块有需要定时运行的功能是,可以参照sitemap在自己的config.xml配置要执行的方法。

 

这里我们再来了解一下 cron job 中的定时器语法

标签中的 5 颗 * 分别代表:

# — M: 分钟 (0 - 59) # | — H:小时 (0 - 23) # | | — D:一个月的哪一天 (1 - 31) # | | | — M: 一年中的哪个月 (1 - 12) # | | | | — 星期几(0 - 7) (星期日 = 0或7) # | | | | | # * * * * * 被执行的命令

 

 

 

 

 

 

# — M: 分钟 (0 - 59)

# | — H:小时 (0 - 23)

# | | — D:一个月的哪一天 (1 - 31)

# | | | — M: 一年中的哪个月 (1 - 12)

# | | | | — 星期几(0 - 7) (星期日 = 0或7)

# | | | | |

# * * * * * 被执行的命令

另外还有几个特殊的符号就是 “*” | “/” | “-” | “,”

星号 (‘*’) 代表任何可能的值。例如,在“小时域” 里的星号等于是“每一个小时”
斜线 (‘/’) 用于表示跳过某些给定的数。例如,“*/3”在小时域中等于“0,3,6,9,12,15,18,21”等被3整除的数
连词符 (‘-‘) 制定值的范围,例如:“1-6”,意思等同于“1,2,3,4,5,6”
逗号 (‘,’) 分开的值,例如:“1,3,4,7,8”

示例:

下面的计划任务会每一分钟执行

* * * * * [command] or */1 * * * * [command] or 0-59 * * * * [command]

 

 

 

 

* * * * * [command]

or

*/1 * * * * [command]

or

0-59 * * * * [command]

下面的计划任务会在每个小时的0分时运行(就是每小时执行一次)

0 * * * * [command]

 

0 * * * * [command]

下面依旧是一个每小时运行一次的计划任务。不过是在每个小时的一刻钟时运行的(1:15,2:15 …以此类推)

15 * * * * [command]

 

15 * * * * [command]

下面的计划任务每天执行一次,在2:30分

30 2 * * * [command]

 

30 2 * * * [command]

下面的计划任务是在每个月2号的午夜执行(比如:2013-01-02 00:00, 2013-02-02 00:00 …以此类推)

0 0 2 * * [command]

 

0 0 2 * * [command]

下面的计划任务会在每周一的每个小时0分钟时执行一次

0 * * * 1 [command]

 

0 * * * 1 [command]

下面的会每小时运行3次,在0分,10分,和20分时

0,10,20 * * * * [command]

 

0,10,20 * * * * [command]

下面是用除号 / 表示每多少运行一次。本例是每5分钟运行一次

*/5 * * * * [command]

 

*/5 * * * * [command]

还可以用 – 表示一个范围,如下表示5到10点的每个整点运行一次

0 5-10 * * * [command]

 

0 5-10 * * * [command]

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3 [command]

 

0 11 4 * 1-3 [command]

晚上11点到早上8点之间每两个小时,早上八点

0 23-7/2,8 * * * [command]

 

0 23-7/2,8 * * * [command]

另外还有一个特殊的时间关键字“@reboot”,就是每次重启服务器时运行计划任务

@reboot [command]

 

@reboot [command]

关于 Cron 的一些知识 – 使用PHP解析器

CGI脚本默认是可以执行的,但是php脚本不行,他们需要用php解析器来运行,这就是我们要把php解析器的路径放到php脚本前的原因。

注释使用#字符。例如:

# This cron job does something very important 10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

 

# This cron job does something very important  

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

设定E-mail

MAILTO="shawn0828@hotmail.com" # This cron job does something very important 10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

 

 

MAILTO="shawn0828@hotmail.com"  

# This cron job does something very important  

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

有时候php解析器可能在这里”/usr/local/bin/php”。我们可以用下面的命令找到正确的路径:

在终端中输入: which php
系统反馈: /usr/bin/php

 

转载于:https://my.oschina.net/ganfanghua/blog/1613619

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值