【发布时间】:2010-11-13 13:24:36
【问题描述】:
cron 的最大执行时间是多少。如果有任何副作用,是否可以对其进行修改。
【问题讨论】:
标签: drupal cron execution-time
cron 的最大执行时间是多少。如果有任何副作用,是否可以对其进行修改。
【问题讨论】:
标签: drupal cron execution-time
上面接受的答案是错误的。 Drupal 中 Cron 的时间限制被硬编码为 240 秒。请参阅includes/common.inc 中的drupal_cron_run 函数,特别是以下几行:
drupal_set_time_limit(240);
和
if (!lock_acquire('cron', 240.0)) {
(基于 Drupal 7.12 的源码)
因此,如果不入侵核心,就无法在全球范围内改变这一点。我听说有人建议在您的hook_cron 实现中自己调用drupal_set_time_limit,因为这样做会重置PHP 的计数器。但是,当它是实现 hook_cron 的第三方模块时,这对您没有帮助。
【讨论】:
web/core/lib/Drupal/Core/Cron.php:Environment::setTimeLimit(240);
Drupal cron 的最大执行时间取决于您的 php.ini。
例如,如果您使用wget -O - -q -t 1 @987654321@ 作为您的 cron 命令,则使用 apache 的 php.ini 来确定最大执行时间。
如果你使用php -f cron.php作为你的cron命令,那么使用php-cli的php.ini来确定最大执行时间。
建议使用 php-cli 以获得更高的执行时间,您可以从/etc/php5/cli/php.ini 设置最大执行时间(如果您使用的是 debian linux)并且在 cron 运行时对 apache 没有副作用。
【讨论】:
hook_cron() 实现不依赖于使用 Web 服务器提供的变量,因为它们显然在那个上下文(花了很长时间才发现一个模块在 cron 调用中使用了$_SERVER['DOCUMENT_ROOT'])。
我不知道是否一定是这种情况,因为我刚刚通过浏览器运行cron.php,我得到了 240 秒的max excution time error,而我在 php.ini 中的最大执行时间是1200 秒。所以除了我的 php.ini 文件 Drupal 正在获取最大执行时间。
某处可能在./includes/common.inc 或./includes/locale.inc 中。进入那里,有一些设置可以调整drupal允许cron在放弃之前运行多长时间
【讨论】:
这个模块可以帮助你:Set Cron Time
【讨论】: