按照标题,有哪些步骤可以解决和解决此问题?
当我尝试手动运行时,会立即得到一个页面,并显示错误消息“正在运行cron时尝试重新运行它”。
drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
按照标题,有哪些步骤可以解决和解决此问题?
当我尝试手动运行时,会立即得到一个页面,并显示错误消息“正在运行cron时尝试重新运行它”。
drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
Answers:
cron信号灯可能已锁定。您可以尝试从代码中的任何地方调用drupal_cron_cleanup()(cron不会偶然调用它),并且应该可以解锁cron信号量变量。
如果您在Drupal 6中配置了Drush,也可以尝试:
$ drush vdel -y cron_semaphore
cache_bootstrap
。
drupal_cron_cleanup()
似乎没有更新。
如果满足以下两个条件,则会出现您看到的错误消息:
因此,此错误消息是cron任务的症状,该任务失败或运行时间太长。(注意:我知道您已经找到了罪魁祸首,但是我想像以前一样为通过搜索找到此页面的人添加答案)
首先要了解的是如何运行Drupal cron任务。Drupal cron会定期进行调用 -通过服务器上的cron作业,或者在每次页面加载后调用(如果您使用的是可怜人的cron,这是Drupal的默认设置)。
cron任务不一定在每次调用cron时都运行,但是-Drupal中有一个设置(默认为3小时),该设置说明cron任务应多久运行一次。但是,仅当cron任务成功完成时,才需要3个小时的延迟。
在Drupal 7中,cron使用了Drupal的锁定机制,该机制提供了协作的咨询锁定系统。该锁系统的功能之一是,锁会在一定时间后过期。对于cron,它会在4分钟后过期-因此,如果您的cron每3分钟被调用一次,并且之前的cron作业到那时还没有完成(崩溃或非常慢),您确实会收到此错误消息。
您将cron设置为每12小时这一事实并没有什么不同-因为Drupal cron任务失败/花费的时间太长,Drupal假定它尚未运行,因此尝试在cron调用后立即再次运行它。十二小时的延迟仅适用于成功的cron运行。
cron信号量变量在Drupal 7中不再存在-这是针对较旧版本的Drupal的。在Drupal 7中,没有可靠的方法来手动释放锁定,因为锁定后端可能会更改-但是,如果您使用核心锁定机制,则可以通过编辑数据库来释放cron锁定:
DELETE FROM semaphore WHERE name = 'cron';
但是这样做只能解决问题-需要解决的问题是为什么cron失败/运行时间如此之长。
在Drupal 7上,还有另一种选择,
通过drush cron
我得到,
WD cron: Attempting to re-run cron while it is already running. [warning]
Cron run failed. [error]
这是在开发环境中发生的,因为先前的cron正在运行并被中断。
在includes/common.inc
,在5413线,或周围,你会发现这个块,https://cgit.drupalcode.org/drupal/tree/includes/common.inc?h=7.x#n5413
// Try to acquire cron lock.
if (!lock_acquire('cron', 240.0)) {
// Cron is still running normally.
watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
}
修改if
用&& FALSE
,
// Try to acquire cron lock.
if (!lock_acquire('cron', 240.0) && FALSE) {
// Cron is still running normally.
watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
}
并重新运行cron。这将使其运行。
请不要部署它,并在完成后将其还原。它还有助于调试。
我已经遇到了几次。在Drupal 6中,如果不使用drush,则可以按以下方式修复它:
1从变量表中删除cron_%变量。
SELECT * FROM variable WHERE name like "cron%";
DELETE FROM variable WHERE name like "cron%";
2个清除Drupal缓存的位置:/ admin / settings / performance
通过点击页面底部的“清除缓存的数据”按钮。
3从管理面板/ admin / reports / status / run-cron运行cron不要从comand行运行它,因为这可能会引起问题。
4检查下一次自动cron运行是否正常完成。
您可以使用xdebug进行调试,从管理界面Admin> Configuration> system> cron运行cron。