cron停止奔跑;日志说:“尝试在已经运行的同时重新运行Cron。” -- 7 领域 和 cron 领域 drupal 相关 的问题

Cron stopped running; logs say: “Attempting to re-run cron while it is already running.”


11
vote

问题

中文

根据标题排除故障和解决此问题的步骤是什么?

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

英文原文

What are the steps to troubleshoot and resolve this issue as per title?

When I try to run manually, I get a page immediately, and the error message "Attempting to re-run cron while it is already running."

     
       
       

回答列表

12
 
vote
vote
最佳答案
 

Cron信号量可能被锁定。您可以尝试调用 drupal_cron_cleanup()从您的代码中的任何位置(这不会被Cron调用),它应该解锁你的Cron信号量变量。

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

  if ( $op == 'presave' and $node->type == 'event' ) :    $existing = node_load($node->nid);    if ( $existing ) :        check your fields in $node against the $existing node        if they are different do something 3  
 

The cron semaphore is probably locked. You could try calling drupal_cron_cleanup() from anywhere in your code (that doesn't happen to be invoked by cron) and that should unlock your cron semaphore variable.

If you have drush configured in Drupal 6 you could also try:

$ drush vdel -y cron_semaphore 
 
 
         
         
19
 
vote

摘要

如果满足以下两个条件,则会发生错误消息:

  • 你cron工作没有完成(错误)或花费超过4分钟完成;
  • 你比每4分钟更频繁地调用cron(根据你的crontab设置,而不是drupal的设置)
因此,此错误消息因此是CRON任务的症状,它们无法运行或花费太长。 (注意:我意识到你已经找到了罪魁祸首,但我想为通过搜索找到这个页面的人添加答案,就像我一样)

背景

要了解的第一件事是如何运行Drupal Cron任务。 Drupal Cron以定期的间隔调用 - 通过服务器上的Cron作业,或者在每个页面加载之后,如果您使用较差的男人的Cron,这是Drupal默认的。

Cron任务不一定运行每次调用Cron - Drupal(默认为3小时)中有一个设置,这表示应该运行Cron任务的频率。但是,如果Cron任务已成功完成,则此延迟仅适用。

在Drupal 7中,Cron使用Drupal的锁定机制,哪个提供合作,咨询锁系统。此锁定系统的一个功能是锁在一定时间后到期。在Cron的情况下,它在4分钟后到期 - 所以如果每3分钟调用每3分钟,并且之前的Cron作业尚未完成那个时间(它崩溃或非常慢),则确实收到此错误消息。

你将cron设置为每12小时的事实不会产生差异 - 因为drupal cron任务失败/花费太长,drupal假设它尚未运行,所以一旦Cron一旦再次尝试运行它被调用。十二小时延迟仅适用于成功的Cron运行。

在Drupal 7中,Cron信号量变量不存在任何内容 - 这是用于旧版Drupal。在Drupal 7中没有可靠的方法来手动释放锁定,因为锁定后端可能会改变 - 但是如果使用核心锁定机制,则可以通过编辑数据库来释放Cron锁:

  DELETE FROM semaphore WHERE name = 'cron';   

但是通过这样做,你只会修复症状 - 需要寻址的问题是为什么Cron失败/花费这么长时间运行。

 

Summary

The error message you are seeing would happen if the following two conditions are met:

  • You cron jobs do not finish (error) or take more than 4 minutes to finish ;
  • You invoke cron more often than every 4 minutes (According to your crontab setting, not the setting in Drupal)

This error message is therefore a symptom of a cron tasks that is either failing or taking too long to run. (Note: I realise you have already found the culprit, but I wanted to add an answer for people who find this page via searches, as I did)

Background

The first thing to understand is how Drupal cron tasks are run. The Drupal cron is invoked at regular intervals - either through a cron job on your server, or after every page load if you use the poor man's cron which is Drupal's default.

The cron tasks are not necessarily run every time cron is invoked however - there is a setting in Drupal (default is 3 hours) which says how often cron tasks should be run. But this delay of 3 hours only applies if the cron tasks have finished successfully.

In Drupal 7, cron uses Drupal's locking mechanisms, which provides a cooperative, advisory lock system. One of the features of this lock system is that locks expire after a certain time. In the case of cron, it expires after 4 minutes - so if your cron is invoked every 3 minutes and the previous cron job hadn't finished by that time (either it crashed or was very slow), you would indeed get this error message.

The fact you set the cron to be every 12 hours does not make a difference - because the Drupal cron task is failing/taking too long, Drupal assumes it hasn't been run so tries to run it again as soon as cron is invoked. The twelve hour delay only applies to successful cron runs.

The cron semaphore variable does not exist any more in Drupal 7 - this was for an older version of Drupal. In Drupal 7 there is no reliable way to manually release a lock, because the locking backend might change - however if you are using the core locking mechanism then you can release cron locks by editing the database:

DELETE FROM semaphore WHERE name = 'cron'; 

But by doing this you would only be fixing the symptoms - the problem that needs addressing is why is cron failing / taking so long to run.

 
 
       
       
4
 
vote

cron_semaphore 变量在Drupal 6中存在,但您使用Drupal 7,因此信号量锁进入名为 99887662 的单独表。

所以解决Cron信号量的解决方案是:

drupal 7

  drush sqlq "TRUNCATE semaphore"   

drupal 6

  drush -y vdel cron_semaphore    
 

The cron_semaphore variable did exist in Drupal 6, but you're using Drupal 7, so the semaphore locks moved into separate table called semaphore.

So solution to unlock the cron semaphore would be:

Drupal 7

drush sqlq "TRUNCATE semaphore" 

Drupal 6

drush -y vdel cron_semaphore  
 
 
 
 
2
 
vote

您可以使用 cron调试

来调试cron调试cron。

cron debug将帮助您找到

的Cron进程
    由于编程或运行时错误
  • 失败
  • 超时(php,服务器,数据库)
  • 非常缓慢

cron调试还将允许您测试运行特定的CRON函数 不跑别人。这对于开发Cron来说可能是很好的 您不希望使用全部运行完整Cron.php的功能 每次测试您自己的维护,警报和其他任务 功能。

 

You can debug the cron by using Cron Debug module.

Cron Debug will help you find cron processes which

  • fail due to programming or runtime errors
  • time out (PHP, server, database)
  • are very slow

Cron Debug will also allow you to test run specific cron functions while not running others. This can be nice for developing cron functions where you don't want to run a full cron.php with all maintenance, alerts and other tasks every time you test your own function.

 
 
   
   
1
 
vote

这是我解决了Cron问题的方式:

    通过phpmyadmin来看,我看着信号量表和删除的行,其中 name = cron
  1. 我通过命令行ran"drush cron"
  2. 我看到了一条错误的消息,给了我一个问题的线索;这对您来说可能是不同的,但对于我来说,最近卸载的模块,该模块与安装的模块共享PHP库导致错误
 

This is how I solved the cron issue:

  1. Via PhpMyAdmin, I looked in the semaphore table and deleted row where name = cron
  2. I ran "drush cron" via command line
  3. I seen an error message that gave me a clue of the issue; this may be different for you, but for me a recently uninstalled module that was sharing a PHP library with an installed module was causing an error
 
 
0
 
vote

for drupal 8:drush sqlq"从信号量删除,其中名称='cron';"

 

For Drupal 8 : drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"

 
 
0
 
vote
在Drupal 7上,载入甚至是另一种选择, p>通过 drush cron 我得到了,
  WD cron: Attempting to re-run cron while it is already running.       [warning] Cron run failed.                                                      [error]   

这是关于开发环境,发生了,因为以前的Cron正在运行并被中断。

on 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);   }   

和重新划分。这将允许它运行。

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

 

On Drupal 7, as even another option,

Via drush cron I was getting,

WD cron: Attempting to re-run cron while it is already running.       [warning] Cron run failed.                                                      [error] 

This was on development environment and happened because a previous cron was running and got interrupted.

On includes/common.inc, at line 5413, or around, you'll find this block, 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);   } 

Modify the if with an && 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);   } 

And rerun cron. That will allow it to run.

Please don't deploy this and revert it back after it finishes. It also helps with debugging.

 
 
-1
 
vote

我已经想出了几次。在Drupal 6如果您不使用醉汉,您可以如此解决:

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

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

2清除Drupal缓存: / admin / setting / perfule performance

通过按页面底部的"清除缓存数据" 按钮。

3从管理面板/ admin /报告/状态/ run-cron运行cron 不要从Comand线路运行它,因为这可能导致问题。

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

 

I've come up against this a few times. In Drupal 6 If you don't use drush you can fix it like this:

1 Remove the cron_% variables from the variables table.

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

2 clear Drupal cache at: /admin/settings/performance

by pressing the 'clear cached data' button at the bottom of the page.

3 run cron from admin panel /admin/reports/status/run-cron don't run it from comand line as this can cause problems.

4 Check that the next automatic cron run completes as normal.

 
 
     
     
-1
 
vote

可以使用xdebug调试,从管理员接口admin&gt运行cron;配置>系统> cron。

 

You can debug by using xdebug , run cron from admin interface Admin > Configuration > system > cron.

 
 

相关问题

1  如何修改房间模块?  ( How to modify the rooms module ) 
我正在测试房间模块。这是一个很棒的模块。 它有一个页面到执行搜索以获取房间的可用信息(MySite /预订)。我需要这个页面可以作为块使用。 所以我可以将搜索者放在任何地方。 使用此模块的任何人都可以帮助执行它? 我刚刚找到了如何获得块。但现在我无法让验证正常工作。如果未选择日期,则显示错误页面。 任何帮助? ...

8  无法发送电子邮件。如果问题仍然存在,请联系站点管理员  ( Unable to send e mail contact the site administrator if the problem persists ) 
当我的Web表单填写并提交时,我被重定向到了一个页面: 谢谢你提交。 但是在那里有一个红色警告盒子说: 无法发送电子邮件。如果问题仍然存在,请联系站点管理员。 我认为它是smtp服务器,但我不知道如何修复它。 ...

8  覆盖模块中的node.tpl.php  ( Override node tpl php in a module ) 
我创建了一个应该能够显示某个内容类型的内容的模块。显示是有点复杂的,并且能够将其关闭并将所有内容分组在一起,我为此创建了一个模块。 但最后它应该只覆盖与自定义.tpl.php文件的普通节点.tpl.php。当我将文件放在我的模板文件夹中时,它会被拾取,页面按预期显示,但是当文件在模块文件夹中时,我无法将其工作。 我读...

0  调用hook_node_view时Cron失败  ( Cron fails when calling hook node view ) 
手动通过GUI手动运行CRON时,CRON开始运行,但我已经追溯到我的一个模块中的TOP_NODE_VIEW失败。 代码是: if ($node->nid == 47) { //THIS CODE IS HAPPENING, but HOW in hook_node_view when running ...

2  如何在PHP中获取Drupal变量文件?  ( How to access drupal variables in a php included file ) 
我有一段HTML,我以MySnippet.inc保存在我的主题中。我在模板文件中使用此代码(例如,node.tpl.php)以包含它: <?php include($directory."/includes/mysnippet.inc"); ?> 这是正常工作,但代码段也需要访问Drupal变量$ node...

1  帮助学习D7 [已关闭]的OpenLayers  ( Help learning openlayers for d7 ) 
正如目前所在的那样,这个问题并不适合我们的Q&amp;一种格式。我们预计事实,参考资料或专业知识的支持,但该问题可能会征求辩论,论点,投票或扩展讨论。如果您觉得可以改进此问题并可能重新开放,请访问帮助中心进行指导。 ...

1  将视图附加到特定节点  ( Attach a view to a specific node ) 
我正在寻找一个模块,使得可以将现有视图附加到特定节点。我看过 eva ,但似乎只允许将视图连接到特定内容的所有实体-类型。我写了我自己的模块,可以这样做,它有效,但我想使用良好测试和维护的模块。有没有人有任何建议? *编辑* 我已经安装了 views reference 模块,这似乎是我想要的,但是当我做 p...

0  如何制作2行菜单链接标题?  ( How to make a 2 line menu link title ) 
我已设置一个菜单,其中包含正常工作的菜单标题列表。但是,正如我想要的那样,链接 li 带有 background-color 和圆角,我需要能够在更长的长度菜单标题中手动插入休息,而不是依靠自动控制线条断裂的宽度。 从我可以从在线搜索什么,通过将模板文件的副本从核心从核心修改到我的主题中,有一些方法,但我不确定如何做...

2  在视图admin中,是否有一个部分要将CSS插入到样式视图?即,在没有编辑主题代码或其他滴水PHP的情况下如何样式视图?  ( In views admin is there a section to insert css to style the view i e how to ) 
在视图admin(即admin / stures /视图)中,设置中是否有一个部分来插入CSS来样式视图?即,我如何在没有编辑主题代码或其他Drupal PHP的情况下样式视图? 我能够找到我需要风格的哪个类标识符 - 查看问题/答案: 哪个html div类是相关的在Drupal 7中的造型视图(CSS)? 但...

1  如果聚合的视图结果,我如何在视图中显示一些没有结果文本?  ( How do i display some no results text in a view if the views results are aggrega ) 
我已创建一个查看块,显示单独用户标记的用户数。我通过使用高级下拉下的"使用聚合" 选项来完成此操作。我有一个UID字段,我通过计数分组,并且在没有结果配置中我写了"0" 。出于某种原因,当我去打印我的观点时,如果没有结果,它不会显示任何东西,我想知道为什么。 ...

13  截断字段修订表是否可以安全?  ( Is it safe to truncate a field revision table ) 
我注意到d7为每个字段创建一个字段_revision表,即使有一个版本关闭,也可以从其现场表对应物中重复内容。 我有一个大文本表,它占用了很多空间(几个GB)。 截断修订表是否会安全? ps:同时,我也称为一个错误。 ...

0  设置基本URL的视图路径  ( Set a views path to base url ) 
我正在使用视图。 每个视图都需要路径,我想将该路径设置为我的基本URL。 例如,我想让一个视图将汽车作为参数作为参数,并在上显示结果 www.example.com/Car 任何帮助都将得到理解。 ...

0  注册后如何锁定用户配置文件字段?  ( How can i lock a user profile field after registration ) 
我在我的用户配置文件上有一个自定义字段;我希望它在注册时填写,但在后期注册时不会更改。 如何实现这一目标? ...

0  image_scale_and_crop  ( Image scale and crop ) 
在drupal 6中有一个参数$ destination for unction'image_scale_and_crop()'。参数在D7中不可用。我有以下代码块。 image_scale_and_crop($image, 100, 70); 如果我检查文件目录,则执行此代码在路径中创建缩略图。 我的问...

0  在自定义模块中设置权限  ( Set permissions in custom module ) 
我正在为我的drupal 7站点编写一个自定义模块。我添加了代码以启用配置表单。 我想仅将Configtr限制为管理用户,以及另一组用户的功能。我怎么去做这个? 任何和所有帮助极大地感谢。 ...

3  面板页面和分类学术语论据  ( Panel pages and taxonomy term arguments ) 
我正在研究一个新的Drupal 7网站,它正在繁重地使用面板构建页面。 我有一个视图将被添加到内容窗格中。由于各种原因,视图不能是自己的页面。此特定视图具有上下文过滤器,内容:具有分类项ID。查看数字参数很棒。 我希望我的面板页面使用术语名称作为视图而不是术语ID的参数。而且,由于各种原因,我不能使用面板附带的 t...

0  这是这样做的吗?将块插入节点的内容体字段  ( Is this the right way to do this inserting a block into the content body field ) 
我非常新的是使用drupal 7并试图了解将书籍导航菜单块插入节点的内容字段,或者内容的任何字段/内容块的正确方法。 无论如何,我提出的一个解决方案是这样的: 在字段中 - body.tpl.php <?php $block = module_invoke('book', 'block_view'); //...

2  如何在其他网站中嵌入Drupal内容? [关闭]  ( How to embed drupal content in other websites ) 
关闭。这个问题需要详细信息或清晰度。它目前不接受答案。 想要改进这个问题?添加详细信息并阐明编辑此帖的问题。 关闭 1年前。 ...

5  最接近位置和视图的节点  ( Closest nodes with locations and views ) 
我正在使用drupal 7,使用视图3模块和安装的位置3模块。 我有一个具有位置类型字段的内容类型,我想构建给定纬度/经度输入和最大距离的视图,我必须检索在该范围内的所有节点。这可能是可能的看法,或者我必须自己建造一些东西(在这种情况下,你能告诉我如何实现它的方式)。 非常感谢您的帮助 danilo 恢复问题...

0  制作上下文节点路径和引用列表  ( Making contextual node paths and reference lists ) 
首先,我即将设置一个网站呈现产品目录。由于在某些时候我们开设商店很有可能,我决定将商务产品从一开始就呈现产品,假设在我们准备好时会更容易地迁移到真正的商店。 (是那个假设是否正确?) 现在,每个产品都将使用两个独立分类(即每个显示产品有2个分类字段)标记。那是因为每个产品都有两个可能的情况:它是如何构建的以及如何使用...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.