首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Cron停止运行;日志上说:“试图在cron已经运行时重新运行cron。”

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

Drupal用户
提问于 2011-12-12 11:17:30
回答 9查看 16.6K关注 0票数 11

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

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

EN

回答 9

Drupal用户

回答已采纳

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

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

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

代码语言:javascript
复制
$ 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锁:

代码语言:javascript
复制
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

代码语言:javascript
复制
drush sqlq "TRUNCATE semaphore"

Drupal 6

代码语言:javascript
复制
drush -y vdel cron_semaphore 
票数 4
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档