欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Cron 执行失败 Drupal运行Cron提示“当Cron 已经在运行时,尝试重新运行”问题的解决方法 有大用

DELETE FROM `variable` WHERE name = "cron_semaphore"            


           

来自  https://blog.csdn.net/iteye_2723/article/details/81926452            



Cron停止运行;日志上说:“试图在cron已经运行时重新运行cron。”


按照标题来排除和解决这个问题的步骤是什么?

当我尝试手动运行时,我会立即得到一个页面,并收到错误消息“试图在cron已经运行时重新运行它”。


EN                    

回答 9

Drupal用户

回答已采纳                            

发布于 2011-12-13 00:19:54

cron信号量可能被锁定了。您可以尝试从代码中的任何位置调用德鲁帕尔_cron_清理() (这并不是cron所调用的),并且应该会解锁cron信号量变量。

如果在Drupal 6中配置了drush,也可以尝试:

$ drush vdel -y cron_semaphore
                                       
票数 12                                
EN                                    

Drupal用户

发布于 2013-07-25 10:47:31

摘要

如果满足以下两个条件,将出现您正在看到的错误消息:

  • 您的cron作业不完成(错误)或超过4分钟完成;

  • 调用cron比每4分钟更频繁(根据crontab设置,而不是Drupal中的设置)

因此,此错误消息是cron任务失败或运行时间过长的症状。(注:我知道你已经找到了罪魁祸首,但我想为那些通过搜索找到这个页面的人添加一个答案,就像我一样)

背景

首先要了解的是Drupal任务是如何运行的。Drupal是定期调用的--或者通过服务器上的cron作业调用,或者在每次加载页面之后调用,如果您使用了穷人的cron (这是Drupal的默认值)。

然而,不一定每次调用cron时都运行cron任务--在Drupal中有一个设置(默认为3小时),这说明cron任务应该多久运行一次。但是,只有当cron任务成功完成时,3小时的延迟才适用。

在Drupal 7中,cron使用了Drupal的锁定机构,它提供了一个协作的、顾问式的锁系统。这个锁系统的一个特点是锁在一定时间后过期。在cron的情况下,它在4分钟后到期--因此,如果您的cron每3分钟被调用一次,而之前的cron作业到那时还没有完成(要么崩溃了,要么非常慢),那么您确实会得到这个错误消息。

将cron设置为每12小时一次的事实并没有什么区别--因为Drupal任务失败/花费太长时间,Drupal假设它没有运行,所以在调用cron时尝试再次运行它。12小时的延迟只适用于成功的cron运行。

cron信号量变量在Drupal 7中不再存在--这是针对较早版本的Drupal的。在Drupal 7中,不存在手动释放锁的可靠方法,因为锁定后端可能会发生变化--但是,如果使用核心锁定机制,则可以通过编辑数据库来释放cron锁:

DELETE FROM semaphore WHERE name = 'cron';
                                       

但是这样做只会修复症状--需要解决的问题是为什么cron失败/花了这么长时间才能运行。

票数 19                                
EN                                    

Drupal用户

发布于 2014-07-31 15:54:44

cron_semaphore变量确实存在于Drupal 6中,但是您使用的是Drupal 7,因此信号量锁移到了名为semaphore的单独表中。

因此,解锁cron信号量的解决方案是:

Drupal 7

drush sqlq "TRUNCATE semaphore"
                                       

Drupal 6

drush -y vdel cron_semaphore 
                                       
票数 4                                
EN                                    

Drupal用户

发布于 2015-05-26 05:29:09

您可以使用Cron Debug模块调试cron。

Cron Debug将帮助您找到cron进程

  • 由于编程或运行时错误而失败

  • 超时(PHP、服务器、数据库)

  • 都很慢

Cron Debug还允许您测试运行特定的cron函数,而不运行其他函数。这对于开发cron函数是很好的,您不希望每次测试自己的函数时都运行包含所有维护、警报和其他任务的完整cron.php。

票数 2                                
EN                                    

Drupal用户

发布于 2015-03-24 13:21:16

我就是这样解决cron问题的:

  1. 通过PhpMyAdmin,我查看了信号量表,并删除了name = cron所在的行

  2. 我通过命令行运行了"drush cron“

  3. 我看到了一条错误消息,为我提供了这个问题的线索;这对您来说可能不一样,但对于我来说,最近卸载的模块与已安装的模块共享PHP库会导致错误

票数 1                                
EN                                    

Drupal用户

发布于 2017-04-13 14:51:31

对于Drupal 8: drush sqlq“从信号量删除其中的名称=‘cron’;

票数 0                                
EN                                    

Drupal用户

发布于 2018-12-11 01:23:09

在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。这样它就可以运行了。

请不要部署它,并在它完成后恢复它。它也有助于调试。

票数 0                                
EN                                    

Drupal用户

发布于 2014-07-31 16:01:05

我遇到过几次这样的事。在Drupal 6中,如果不使用drush,您可以这样修复它:

1从变量表中删除cron_%变量。

SELECT * FROM variable WHERE name like "cron%";

DELETE FROM variable WHERE name like "cron%";
                                       

2清除Drupal缓存:/admin/设置/性能

按下页面底部的“清除缓存数据”按钮。

3从管理面板/ admin /reports/status/ run运行cron,不要从comand行运行它,因为这会导致问题。

4检查下一个自动cron运行是否正常完成。

票数 -1                                
EN                                    

Drupal用户

发布于 2015-05-26 09:18:14

您可以使用xdebug进行调试,从管理界面运行cron管理>配置> system > cron。

票数 -1                                
EN                                    
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/17264

复制                


           

来自 https://cloud.tencent.com/developer/ask/sof/116541734            


           

普通分类: