第五步:设置cron

原文地址:http://drupal.org/cron

在Drupal站点搭建的过程中,配置cron是及其重要的任务。搜索模块对网站内容的索引,收集模块的运行资料,检查模块的更新情况,以及执行系统模块的日常维护任务,比如简化运行日志,都要依靠于对cron的正确配置。

那么,什么是cron呢?

很多的Drupal模块会不时的运行以完成相应的任务。我们可以把cron想象为Drupal加工厂的时钟,时时提示Drupal应该执行什么任务。
事实上,cron是由网站托管服务器通过时间触发的(通常也是很高效的)动作,当然也可以通过远程服务触发,甚至是通过你的电脑触发动作。
对Drupal站点而言,真正发生的事是cron作业通过悄悄的访问站点的cron.php(比如http://www.example.com/cron.php)文件,依次运行不同的模块执行相关任务。【注:在Drupal 7中,cron.php的确切位置被隐藏起来了(为了防止未经授权的爬虫访问你的cron.php文件)。网站cron.php文件的确切地址大致是这个样子-http://example.com/cron.php?cron_key=hW309d0DD2Qw4_4NXXnUW7q3SFCQfPP8v11...,准确的路径可以通过查看网站的状态报告获得。】

不通过cron触发cron动作

通过将“懒人专用cron”引入Drupal 7核心,已经不再需要在你的托管服务器构建cron作业了。相反的是,你可以通过配置admin/config/system/cron(Administration > Configuration > System > Cron)来设置cron的运行频率。当用户访问网站的时候,cron动作会被自动触发。(你也可以设置完全禁止这个功能用以提高网站性能,可以将“在任何地方运行cron(Run cron every)”的值设置为“永不使用(Never)”,或者在setting.php文件中设置$conf['cron_safe_threshold'] = 0以实现目的。)
 
在Drupal 6里面,可以通过Poormanscron模块使用和Drupal 7的自动触发cron一样的功能。
 

使用cron命令配置定时任务(cron jobs)

Last updated September 5, 2012. Created by ezraw on May 27, 2005.
Edited by jhodgdon, rjacobs, mariomaric, Forest Mars. Log in to edit this page.
翻译:南文子  原文地址:http://drupal.org/node/23714

Cron是在特定时间运行命令的一个后台程序. 这些命令就叫做"cron jobs." Cron 可以运行在 Unix、Linux和Mac servers等系统中. Windows servers使用一个叫 计划任务(Scheduled Task)的程序来运行命令.

对于一个适中的个人站点, 你可能会设置这些定时任务(cron jobs)每天运行一次. 对于更加活跃和站点你可能希望定时任务运行的更频繁——或许每几个小时或每个小时. 这种定期的访问会告诉drupal执行周期性的任务,并且帮助你让你的系统流畅运行.

这有一个视频, 如何设置drupal的计划任务 主要讨论cron并且讲述各种配置计划任务的方法.

cron命令

下面的实例中,定时任务命令会在指定的时间自动激活计划任务:

0 * * * * wget -O - -q -t 1 http://www.example.com/cron.php

上面的例子中, 参数0 * * * *代表任务将要执行的时间. 第一个数字代表分钟——在这个例子中, 是在零分钟时, 或指定小时的开始. (如果这个数字是10, 那么指定的动作会在小时过后10分钟开始运行.) 其它数字含义, 分别是, 小时, 日, 月份 和 某周的某天. 一个 *是一个通配符, 表示 "每一个时间."

这一行剩下的参数主要告诉服务器请求url http://www.example.com/cron.php, 然后服务器运行cron.php代码. 注意: -O 是 "破折号 大写字母O", 不是"破折号零". 当然, 大写O很重要. 如果写成小写o将不会运行。

在Drupal 7中, 一个安全的私有URL用来执行计划任务(cron job). 这个URL可以从管理(Administration) > 报告(Reports)> 状态页面(Status page)的计划任务维护区获取.

URL形式大概如下:

http://www.example.com/cron.php?cron_key=y85HnNQxjdqM-deRXj2Xrp2MJumqe1H...

如果你使用的是D7 就可以把任务指向 http://www.example.com/cron.php的URL替换成你自己安全私有的URL.

这有一个计划任务语法的图表:

# +---------------- 分钟minute (0 - 59)
# |  +------------- 时hour (0 - 23)
# |  |  +---------- 日day of month (1 - 31)
# |  |  |  +------- 月month (1 - 12)
# |  |  |  |  +---- 周的某天day of week (0 - 7) (星期天Sunday=0 or 7)
# |  |  |  |  |
  *  *  *  *  *  要执行的命令

由此, 上面的命令意思是在每月的每周每天的所有小时的0分时 "ping http://www.example.com/cron.php 这个地址。

Drupal是如何调用cron的

每个drupal在安装的时候都需要定期的动作处理维护性的任务,如清理记录文件和检查更新。Cron.php是Drupal用来运行这些维护过程的文件。

例如:如果你的站点是www.example.com, 在浏览器中加载这个http://www.example.com/cron.phpURL就会运行cron维护过程.

这个文件在drupal安装时就会自动创建,很简单的调用这个URL就会运行维护工作,不需要更多的附加条件。

如何建立一个计划任务工作(cron job)

计划任务工作(Cron jobs)是由设置的"定时任务(crontab)"预定义的。 crontab 是一个里面的内容是要运行的命令文本文件,这个文件既可以通过命令行界面进行创建和编辑,如果你的网站管理是基于网络的组件如cpanel 或 Plesk, 你也可以使用网页界面进行创建和编辑。

要想在linux的Plesk控制面版中预定义你的定时任务工作(cron job),转到路径常规组中的设置(Settings) > 计划任务(Scheduled Tasks),选择维护任务运行的系统账户用户(通常是FTP用户),点击"新建计划任务(Schedule New Task)". 设定你的命令运行的时间,你可以使用这篇文章提到过的UNIX定时任务报名表的形式指定时间,然后使用和文章提到的一样的格式指定要运行哪条命令,最后,单击OK

另外, 如果你使用基于网络的控制面版可以向你的空间提供商询问详细的指令说明。

通过下面的命令行编辑一个定时任务:

crontab -e

如果失败了,查看下面的Cron故障检测

添加如下指令的任意一条:

45 * * * *  /usr/bin/lynx -source http://example.com/cron.php 
45 * * * * /usr/bin/wget -O - -q -t 1 http://www.example.com/cron.php
45 * * * * curl --silent --compressed http://example.com/cron.php 

这条指令会在每小时的45分时使用lynx, wgetcurl放问你的cron页面。

提供三种方式是为防止你的服务器是可能没有安装wget、lynx或curl, 任何一种方式都是可以正常工作的。

经常创建计划任务时可以到这个地址了解更多的定时任务文件(crontab file)的语法(英文)。

有很多方法可以配置一个计划任务工作(cron job). 如果你有操作定时任务的全部权限,就可以简单的把上面例子中的命令粘贴一条到定时任务文件中 – 请确保将"example.com"替换为你自己的域名或文件根路径

如果你使用的是共享的虚拟主机,你应该能在主机控制面版中的某处找到定时计划工作配置。一些主机对于不熟悉cron的会提供cron向导来引导你完成cron配置。在win系统中可以使用计划任务工具运行IE浏览器指向你的URL来完成相同的工作。

有些主机商不允许本地环回接口(local loopback)的运行, 那么使用wget, curl 或 lynx 的命令就不能工作。 如果出现这种情况, 并且他们运行PHP作为公共网关接口(CGI) (可以检查你的主机提代商配置看下是不是这种情况), 就可以使用下面的命令运行cron :-

/usr/bin/php /home/sites/example.com/public_html/cron.php

还有一些空间商不允许操作cron文件

如果你的空间商约束了你的CRON权限,则试试下面的办法:

  • 向空间商申请权限,或让他们帮你完成计划任务工作的创建
  • 向某个有服务器权限的管理者申请帮你创建cron job,任何有Unix、 Linux或 Mac服务器管理权限的都可以使用一个cron job来定期访问你的站点。当然也有一些公司会提供cron创建业务
  • 使用Poor Man's Cron模块.
  • 找一个在线cron服务. 很多都是免费的但会有一定的限制条件。

Cron不能保证在确定的时间间隔执行,但Drupal会尽最大可能让它工作的最好,你访问cron.php文件的次数越多, cron运行的时间就会越精确。

计划任务工作(cron jobs)故障排除

确保你的站点不是在维护模式。

如果在运行crontab -e时收到拒绝访问的信息, 你就需要使用sudo:

sudo crontab -e

你或许需要在你的定时任务文件中调整wget, lynx 或 curl 的路径. 例如, 上面的列出的cron实例中包含这一行:

45 * * * *  /usr/bin/lynx -source http://example.com/cron.php

而Lynx或许在你的服务器上其它路径,或根本没有安装。输入下面的命令可以找出Lynx的安装路径:

whereis lynx

或者

which lynx

如果路径不是/usr/bin/lynx, 就需要做适当的调整,在使用wget 和 curl 命令时也一样。如果都没有安装可以向管理员申请帮助。

或许有必要把地址http://example.com/cron.php更换为你自己的Drupal安装路径。例如你可能把drupal安装在子目录中,可能这种形式http://www.example.com/drupal/cron.php).

命令实例

Drupal指令目录有两个脚本文件 cron-curl.sh 和 cron-lynx.sh 。你也可以通过cron来调用这些脚本文件:

45 * * * * /home/www/drupal/scripts/cron-lynx.sh

要注意的是指令中的路径和URL需要更换成你自己的。

以已验证用户的身份运行cron(仅适用D6和更早版本)

如果使用上面的方法触发cron.php, cron任务会以匿名用户的身份运行。对于大多数情况这很正常, 但如果Drupal cron已经被定制成要以确定的站点用户身份运行 (如:hook_cron钩子函数实现的自定义逻辑需要特殊的用户权限), 就要使用下面的脚本代码。这个脚本会在调用cron.php文件前鉴定当前用户身份。

注意在Drupal 7中, cron 永远 以匿名用户的身份运行, 所以这个脚本在 Drupal 7 和或高版本不起作用!

注意这个脚本必须由合适的服务器系统用户身份运行,并且调用时cron.php要替换成你自己的服务器上的cron配置文件名。

#!/bin/sh
# 参考pearlbear 的评论 http://drupal.org/node/479948#comment-1673488 

SITE=https://dev.example.com/			
USERNAME=user.name			
PASS=ChangeMe!!12						

COOKIES=/tmp/cron-cookies.txt			
WGETPARAMS="--quiet -O /dev/null --no-check-certificate --save-cookies $COOKIES --keep-session-cookies --load-cookies $COOKIES"
# 如果你的drupal默认语言不是英语你就需要修改这里
LOGIN="Log%20in"			

wget $WGETPARAMS "${SITE}user"			
wget $WGETPARAMS --post-data="name=$USERNAME&pass=$PASS&op=$LOGIN&form_id=user_login" "${SITE}user"	
wget $WGETPARAMS "${SITE}cron.php"

通过Drush运行Drupal cron

如果你想快速的开始实际应用, 这有一个定时任务实例,是每时的10分时运行cron:

10 * * * * /usr/bin/env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
COLUMNS=72 /usr/local/drush/drush --root=/path/to/your/drupalroot --uri=your.drupalsite.org --quiet cron 

你应该设置要运行计划任务的用户和运行网站服务器软件用户是一样的; 如:如果你运行网站服务器(webserver)的用户是www-data:

sudo -u www-data crontab -e 

更多信息http://drush.ws/docs/cron.html

安全注意事项

在d6中可以直接通过scripts/drupal.sh来运行cron.php. Drupal.sh 允许使用命令行脚本来运行一个drupal页面, 为了实现这个功能,添加下面的命令以运行apache用户的身份运行定时计划工作:

/full/path/to/drupal.sh --root /full/path/to/site/root/ http://default/cron.php 

注意这里的http://default/cron.php 不是示例代码, 必须这么写不能做任务更改。

运行这条指令可以让cron.php阻止不经允许的远程访问。

为了阻止远程访问cron.php, 可以在服务端.htaccess文件或虚拟主机配置文件加入下面的代码:

<Files cron.php>
    Order Deny,Allow
    Deny from all
    Allow from localhost
    Allow from 127.0.0.1
    Allow from xx.xx.xx.xx <-- your IP address
</Files>

如果你使用这种方法并且使用drupal.sh来调用cron.php, 最好不要以root用户的身份来运行cron job,最好使用一个没有特权的账户用户,好点的选择如 Apache账户中的http-service或www-data用户。 这样以无特权用户登陆并调用crontab -e,或是在Debian server上用Apache账户,如你可以添加一个用户名的参数:

sudo crontab -e -u www-data

使用这个方法不好的一点是,任何由cron jobs产生的以“http://default/”开头的URL都不能很好的形成。

多站点

如果你运行多个站点,你可以使用这个建议让你的站点的cron jobs维护更简单。让杂乱最小化,创建一个目录/etc/cron.5min 并且让定时任务每5分钟读取一次这个目录。

*/5 * * * * root run-parts /etc/cron.5min

然后把多站点的单个文件放到/etc/cron.5min directory目录, 一个站点一个文件。这些文件可以命名为"site1", "site2"等等。 -- 要注意的是如果文件名含有点(.) run-parts将会检测失败 。为了确保cron可以访问所有的文件,把这句加到命令提示符中:

$ sudo run-parts --test /etc/cron.5min
然后检查确定你的所有文件都已经列出。

 

/etc/cron.5min目录中的每一个文件都应该包含这一行:

/usr/bin/lynx -source http://(full site URL)/cron.php > /dev/null 2>&1
或者上面的命令也可使用curlwget

 

如果这句没有工作,试着把下面这句加到每个文件的开头:

#!/bin/sh
然后确保所有文件都是可以通过

 

$ sudo chmod u+x /etc/cron.5min/*
命令执行后可运行的。

 

要了解更多关于多站点使用cron的信息,查看本手册的多站点Cron区内容。

安全套接层SSL

当使用SSL时, 调用wget: --no-check-certificate时可以附加一个参数。不要把“--no-check-certificate”放到 -0 和 - 之间。

45 * * * * /usr/bin/wget --no-check-certificate --quiet -O -https://example.com/cron.php 

为cron配置一个编辑器

你可以指定你想使用哪一个文本编辑器(emacs, vi, nano, etc.)来编辑定时任务文件,可以输入这条指令来告诉系统你想用哪一个编辑器:

export EDITOR=nano

在云站点服务器上配置Cron

Last updated March 14, 2012. Created by zdean on September 1, 2009.
Edited by ajeancharles, Shane Birley, olafveerman. 原文链接.中文翻译:南文子

在云网站服务器上创建一个计划任务作业(cron job)是一个很直观的操作过程,并且可以创建很多种方式。

  1. 登入你的云网站服务器账户。
  2. 选择你要更新的定义域
  3. 单击功能(Features)选项卡。
  4. 向下滚动到cron job列表, 单击创建新任务.
  5. 输入一个任务名. 注意: 任务名随便取。
  6. (可选择项) 如果你想要在cron完成时收到一条通知邮件, 勾选上复选框给我发送邮件(Send me an email)然后输入你想让cron系统通知的邮件地址。邮件的内容包含计划任务工作处理的结果,这些信息对调试比较有用,但如果每一个简单的计划任务你都收到邮件就会让人厌烦。
  7. 命令语言, 选择 http.
  8. 对要运行的命令,输入你的drupal安装目录中cron.php文件的URL, 如:
    • Drupal 6
      http://www.example.com/cron.php
    • Drupal 7

      Only local images are allowed.
          1) 如果想收到通知信息输入EMAIL
          2) 选择命令语言: PHP
          3) 输入命令运行"web/content/cron.php". 注意需要修改到"文件"所在目录。
  9. 选择重复的时间间隔: 下拉菜单中选择计划任务运行的时间间隔。一般推荐每一个小时运行一次维护计划任务,在下拉菜单中选择然后确定频次和分钟(0 - 59)。
  10. 单击保存任务.
  11. 你完成了!

对于Drupal 7需要说明,PHP解释器是直接从它安装的目录中调用。由于要调用的资源在本地,就不需要关键字。但是你要修改cron.php文件, 告诉它"bootstrap.php"文件的路径; 请看下面的插图:
location of bootstrap.php
    在cron.php中调用"getcwd()"函数除了上面的两个文件夹,它是不能定位到"Document"文件夹的,因此cron.php会在错误的路径中寻找bootstrap.php文件。你需要给“getcwd()”的返回字符串中加入"/www.youdomainname.com/web/content"。

附件 大小
bootstrap_dot_php_dir.jpg 34.69 KB

 

在windows系统中配置cron

跟随下边的说明来实现在windows机器上设置在指定时间执行cron.php.如果您不熟悉linux/unix,或者您的web主机不支持cron任务,那么这个方法会很有用;您可以在您的电脑上远程执行它们。

注意:这些说明是为windowsXP写的,不过在其它版本的windows上的操作类似。

创建一个计划任务

  1. 打开任务计划程序
  2. 开始 > 程序 > 附件 > 系统工具 > 任务计划程序
  3. 双击添加计划任务
  4. 添加计划任务向导将会出现。点击下一步
  5. 选择将要运行的应用。从列表中选择浏览器(例如,Internet Explorer或Mozilla Firefox)。点击下一步
  6. 给这个任务一个名称,例如Drupal Cron 任务,选择执行任务的频率(例如,每天),点击下一步
  7. 选择明确的日期和时间选项(根据您前一步的选择,这一步可能会有不同)。完成后,点击下一步
  8. 如果有提示,请输入您的密码。如果需要的话(例如,如果您因为安全原因想使用一个拥有少量权限的用户来执行任务),请改变用户名。点击下一步
  9. 在最后一步,选中复选框在单击“完成”时,打开此任务的高级属性并点击完成

配置任务

  1. 通过选中上一步中的复选框或者双击任务来打开任务设置页面。
  2. 运行框中,当文字出现后,(如C:\PROGRA~1\MOZILL~1\firefox.exe),输入一个空格并且把您的网站的cron.php页面地址加上双引号后输进去(如,C:\PROGRA~1\MOZILL~1\firefox.exe http://www.example.com/cron.php
  3. 要设置一个比每天更高的频率(如,每小时),点击计划面板,然后点击高级。您可以设置一些参数如重复任务,每1小时,持续23小时。结束后点击完成
  4. 改变起始时间从现在开始1分钟,这将允许您测试任务,确保它能正常工作。
  5. 当您完成所有的设置,点击应用完成(提示:您可能会被要求输入密码)

命令行版本

另一种实现上边操作的方法是在命令行下使用命令schtasks(或Windows 2000中的at)。要重复上边的例子,使用Firefox每小时运行http://www.example.com/cron.php, 打开命令行(开始 > 程序 > 附件 > 命令行工具)并输入:

http://www.example.com/cron.php

schtasks /create /tn "Drupal Cron Job" /tr "C:\PROGRA~1\MOZILL~1\firefox.exe http://www.example.com/cron.php" /sc hourly

可能会提示您输入密码。

使用wget for Windows运行cron

不管您是因为什么原因不愿意使用浏览器窗口,您可以使用wget, windows版的wget跟UNIX下的使用起来类似。crul和lynx同样拥有windows版,不过wget很可能是配置和使用起来最简单的了。

作者的网站SourceForge网站下载wget的安装包。把它装到您想安装的地方。

照着上边创建一个计划任务的步骤,除了将wget.exe作为执行程序(如果您是通过.zip包安装的程序,您可能需要点击浏览按钮去定位它)。当您打开高级属性的对话框时,将下边的内容粘贴进去:

-O - -q -t 1 <a href="http://www.example.com/cron.php">http://www.example.com/cron.php</a>

校准上边剩下的参数并且测试一下

将Winodws 7(或Vista)的cmd.exe中的curl加入计划任务

  • 运行计算机管理(Windows键,右键点击我的电脑,选择管理……)
  • 在右边一栏,选择创建任务……
  • 填写常规选项卡
  • 触发器选项卡下,选择新建……,然后设置您想要的时间,并在高级选项中设置重复次数
  • 动作选项卡中
  • ,选择执行一个程序,这个程序是CMD.EXE.在可选参数中输入/C "curl [状态报告页中提到的链接]".

如果您已经安装了mysysgit,那么curl已经在您的系统路径中。

在Windows 7(或Vista)下边使用schtasks和curl

想象一下,您已经安装了上边提到的mysysgit...
以管理员身份运行cmd.exe,然后输入下边的命令:

C:\Windows\system32&gt;schtasks /create /sc HOURLY /tn DevCron /tr "cmd.exe 'curl -<br><span>-silent --compressed <a class="smarterwiki-linkify" href="http://[[hostname]]/cron.php?cron_key=VOYz8P63mnytd0mHVwFE">http://[[hostname]]/cron.php?cron_key=VOYz8P63mnytd0mHVwFE</a></span><br>1jrXfRfNYU9KZiKB1Ou1Rh8'" /ru SYSTEM

[[hostname]]是这篇文档根目录的TLDN, /tn是想要的任务名字(这里是DevCron).

上边的命令产生了一个可以每个小时运行,无限期持续下去的任务。

 

在cPanel中配置cron计划任务工作

最后更新:2012年12月21日。 由 peterx 创建于2009年2月4日。
编辑者:screenack, dhakajack
中文翻译:南文子。原文链接:http://drupal.org/node/369267.

cPanel控制管理域名并且有一个配置计划任务工作的选项,这篇文章有关于你在cpanel里配置计划任务工作时需要的一切。

cPanel是基于主题来版式化页面,本文是基于sundaymorning主题. 如果你使用不同的主题相关的选项位置可能会有改变,你可以使用cpanel中的改变主题(change style)选项来改变显示样式。在sundaymorning和Crimson smoke主题中你可以选择高级(Advanced)然后找到计划任务工作选项(Cron jobs)。

部分cpanel主界面截图,展示高级选项里的计划任务工作图标。cron jobs icon

cPanel的产品网站主机管理器(WHM = Web Host Manager)是在私有的虚拟主机里用来管理域名的,如果你的cpanel界面里没有计划任务(cron)选项,你或许就要到WHM里进行添加,而使用不同的cpanel主题cron图标的位置或许会不同。

可能会给你提供标准的和 高级的 Unix风格用户界面,你可能会看到如下面的错误信息。

/usr/bin/crontab permissions are wrong. Please set to 4755

这个Unix风格的界面你可以输入一条指令,这个指令和配置计划任务工作第一页所讲述的相同。

标准页面可以让你从选项列表选择分、时、日或月份的数字,在最后可以添加指令。

下面的图片展示的是计划任务页面中的创建新的计划任务工作部分,包括下拉选框和最后的指令文本输入框。相关选项框会在下面进行解释。

The cPanel cron jobs screen showing the add new cron job section

通用设置(Common Settings)下拉框可以让你选择每时、每天或其它有用的选项,如选择 Once a day (0 0 * * *), 这条指令里设置分和时为零表示午夜,同样的设置天、月和周为*表示在每周的每一天及每月的每一天。

你可以改变分或时到一个不太忙的时间,例如,一些奥大利亚的站点会在午夜忙于处理从美国发来的请求,在那个时间点正好是美国营业日的开始。

启动计划任务工作的一种简单方式是以不同的方法运行指令文件。Lynx是一种基于网页浏览器的文本文件,可以接受一个URL做为参数。你可以通过计划任务启动Lynx并在源文件参数中指定drupal的计划任务工作。

下图展示最终的命令每天早上6点使用http://petermoulding.com/cron.php作为源文件运行/usr/bin/lynx。这条指令让网页服务器在http://petermoulding.com/运行cron.php. Cron.php是drupal的计划任务控制指令。

The cPanel cron jobs screen showing the command section

下面的图片展示编辑选项中的命令,你可以看到指令各部分之间的联系和前面提到过的下拉选项框。

The cPanel cron jobs screen showing the command in the edit option

Drupal 7

对于Drupal 7你需要在管理界面添加一个特定的安全字符串,到路径Administration管理 › Reports报告 › Status report状态报告查看如下的类似字符串,在cpanel的计划任务命令框中使用完整的字符串。

http://example.com.net/cron.php?cron_key=DH7AVdT0uGeN-WfZLkgfutDfDeYrqELjjTZrnulm3RY

Drupal 7也内含一个改写过的Poormanscron模块在Administration管理 › Configuration配置 › System系统 › Cron计划任务。 Poormanscron模块仅在当有人访问你的站点时会工作,在cpanel中低活性的网页也需要设置计划任务。

Poormanscron模块在计划任务运行时给你有限的控制权,你可以每天查看一次而不是任何时间,如果想把计划任务活动时间控制在特定时间段就会把你退回到cpanel的计划任务页面。在这种情况下你需要把Drupal cron 设置为never因此在你的cPanel计划任务这外就没有活动的计划任务。

很多网站共用一个服务器

当你在一个服务器上有很多个站点时,你或许想将多个计划任务工作通过几分钟分开来运行,以降低活动中的计划任务的集中度。我有很多计划任务工作是以3分钟间隔从午夜运行早上的6点。

你可以查看你的活动日志来选择最佳时间,cPanel提供Webalizer、 Awstats和 Analog并以Webalizer作为预设。 查看Drupal cron.php运行的网站活动日志,不是计划任务运行的站点。计划任务(Cron)执行很少的工作,大部分是由Cron.php进行处理的。

Lynx 或 Wget

Lynx 的官网是 http://lynx.isc.org/. Wget的官网http://www.gnu.org/software/wget/. Lynx是一个网页浏览器并且读取 cron.php时不需要参数,Lynx是激活cron.php最简单的方法。

不少坚持使用wget. 或许他们没有安装lynx。 Wget获取文件并且在读取一个页面时需要特殊的参数,注意这里的wget不是语义性的. 大的-O和常规性的小写-o是不同的选项。

-O -告诉wget输出文件在哪放置,而第二个破折号-告诉wget输出的位置是屏幕screen。这些难懂的没有语义的规格选项指定wget的行为 behave,和lynx的预设参数是一样的。 如果你不使用-O -, 你需要指定取回文件的路径,并保证有合适的权限。

Linux and Unix 有一个叫/dev/null的垃圾桶。 参数 -O /dev/null指定wget将输出直接丢弃。

-q指定退出wget并不产生信息。

-t 1意思是在第一次请求超时时再试一次,如果不指定次数t参数的预设值是20次。 -t 0将指定wget进行无限循环重试如果请求的URL丢失。

单一网站

cPanel可以控制多个站点, 如果你只有一个站点,你可试着使用Lamcraft建议的这种方法, 你可以使用文件路径 php /home/example/public_html/cron.php,而不是使用命令行http://example.com.net/cron.php

这一方法可以工作是因为这只一个站点,一个settings.php 文件,和一个数据库。 Drupal cron.php会默认指向这个站点,如果你使用Drupal多站点或是域名模块, 计划任务cron只会运行在一个站点而其它站点你需要使用http://example.com.net/cron.php

php告诉Linux运行指定的文件如同一个PHP命令的方式运行(CLI 命令行模式), /example/是你的账户路径,如果你的账户是在Red Hat或Fedora Linux中 /public_html或许会是/www

cron jobs计划任务工作开发

你是否在开发使用hook_cron()的模块中执行计划工作? 你可能对下面的说明感兴趣。

Semiclean

Semiclean, http://drupal.org/project/semiclean, 这个模块可以重置cron运行时间日/时计时器, Drupal用来停止cron多次运行。

长期运行的cron jobs

Poormanscron模块和Drupal 7系统是相同的频繁运行,有代码可以防止他们在同一时间运行两次。 定期的 cron是安全的因为你可以指定它每天或每时只运行一次。是什么原为让你要每五分钟运行一次cron job呢, 或许是一支股票更新, 或许因一支股票的分析需要另一个cron job每天运行一次并持续20分钟?

Cron.php可以每五分钟运行一次直到有长期运行的计划任务启动时停止,而新cron job的运行需要等长期运行的计划任务结束。你会遗露5分钟的股票更新直到持续20分钟的股票分析任务结束。

你需要将长期运行的计划任务工作设立成独立的计划任务工作,你可以从cpanel中的计划任务工作独立出 sites/all/modules/stock_analysis/stock_analysis_cron_job.php作为单独的计划任务工作。你可以用编写网络服务一样的方式写stock_analysis_cron_job.php,服务模块包含有编写服务的文档, http://drupal.org/node/113697, 并且一个独立的计划任务工作仅仅是一个不需要输入的Drupal风格的网络服务。

附件 大小
Configuring cron jobs in cPanel Advanced.png 23.88 KB
Configuring cron jobs in cPanel command.png 2.36 KB
Configuring cron jobs in cPanel Add new cron job.png 7.23 KB
Configuring cron jobs in cPanel edit.png 3.26 KB

 

手动运行cron

原文地址:http://drupal.org/node/158922

在Drupal7中运行cron

管理 > 报告 > 状态报告。将页面往下拖动至“Cron维护任务”并点击“手动运行cron”。

同时,drupal核心还提供了一个带有唯一cron_key的链接,可以在网站外部运行cron.

在Drupal5和6中手动运行cron

要运行cron,只需要简单的通过浏览器访问您自己网站的链接http://example.com/cron.php就 可以,cron将会完全在后台运行。您只会看到一个空白页面,这很正常。点击浏览器上的回退按>钮返回到前一个页面。无论您在空白页面上停留多久,返回到前一页面都不会停止cron的运行。

Drupal核心还提供了一个很方便的链接来运行cron.通过链接/admin/logs/status/run-cron?destination=admin%2Flogs%2Fstatus查看状态页。您可以在任何想要执行cron的时候通过把它粘>贴到您自己网站的地址栏来访问。

另外,如果您装有update_status.module这个模块,您可以在admin/logs/updates页面得到一个自定义链接。

Drupal6.x中,在您的网站中查看:管理 > 报告 > 状态报告 > Cron维护任务 > 手动执 行cron.