Cron parou de correr; os logs dizem: “Tentativa de executar novamente o cron enquanto ele já estiver em execução.”
11
Quais são as etapas para solucionar e resolver esse problema de acordo com o título?
Quando tento executar manualmente, recebo uma página imediatamente e a mensagem de erro "Tentando executar novamente o cron enquanto ele já está em execução".
Eu não conseguia lembrar de cima o que no db cron olha, mas um rápido google de "tentando executar o cron enquanto ele já está em execução" me indicou digitaledgesw.com/node/21 , talvez aplicar a D7
Jimajamma
Isso é muito estranho. Essa mensagem é encontrada exatamente uma vez no código do core, logo após uma verificação nessa variável (via lock_acquire em drupal_cron_run). Se você postar mais informações / sintomas que apontam que é realmente diferente, eu a reabrirei.
mpdonadio
Sugestão: você pode tentar instalar um Drupal novo e configurar o cron para executar a cada 3 minutos e ver se você tem o mesmo efeito !!!
Aboodred1
Apenas execute:drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
kenorb
4
PARA FUTUROS LEITORES: A resposta atualmente aceita não está correta para o Drupal 7, a versão do Drupal para a qual a pergunta é. É válido para o Drupal 6, mas o código do Drupal 7 foi alterado; acontece que o Drupal 7 tem restos do Drupal 6 que não foram limpos.
kiamlaluno
Respostas:
12
O semáforo cron provavelmente está bloqueado. Você pode tentar chamar drupal_cron_cleanup () de qualquer lugar do seu código (que não é invocado pelo cron) e que deve desbloquear sua variável de semáforo cron.
Se você tiver o drush configurado no Drupal 6, também poderá tentar:
Ou exclua-o manualmente da tabela de variáveis se você tiver acesso ao banco de dados em vez de drush.
Malks
8
Não esqueça que esses valores estão armazenados em cache na tabela cache_bootstrap.
tostinni
1
por favor, qual é o nome exato da mesa, porque eu não encontrar qualquer cron_semaphore na tabela de variáveis
Mohammed amina Bourkadi
2
Quando executo o comando drush acima, recebo "cron_semaphore não encontrado". Alguma ideia?
Nigel Waters
1
@NigelWaters O semáforo cron tornou-se um cadeado, no Drupal 7, mas drupal_cron_cleanup()parece não estar atualizado.
kiamlaluno
19
Sumário
A mensagem de erro que você está vendo aconteceria se as duas condições a seguir fossem atendidas:
Os trabalhos do cron não são concluídos (erro) ou levam mais de 4 minutos para serem finalizados;
Você invoca o cron com mais frequência a cada 4 minutos (de acordo com a configuração do crontab, não a do Drupal)
Esta mensagem de erro é, portanto, um sintoma de uma tarefa cron que está falhando ou está demorando muito para ser executada. (Nota: eu sei que você já encontrou o culpado, mas eu queria adicionar uma resposta para as pessoas que encontrarem esta página por meio de pesquisas, como eu).
fundo
A primeira coisa a entender é como as tarefas do cron do Drupal são executadas. O cron Drupal é chamado em intervalos regulares - por meio de um trabalho cron no seu servidor ou após o carregamento de cada página, se você usar o cron do pobre, que é o padrão do Drupal.
As tarefas cron não são necessariamente executadas sempre que o cron é chamado - há uma configuração no Drupal (o padrão é 3 horas) que diz com que frequência as tarefas cron devem ser executadas. Mas esse atraso de 3 horas se aplica apenas se as tarefas cron tiverem sido concluídas com êxito.
No Drupal 7, o cron usa os mecanismos de bloqueio do Drupal , que fornecem um sistema de bloqueio consultivo e cooperativo. Um dos recursos desse sistema de bloqueio é que os bloqueios expiram após um certo tempo. No caso do cron, ele expira após 4 minutos - portanto, se o seu cron for chamado a cada 3 minutos e o trabalho anterior do cron não tiver terminado até esse momento (ele travou ou estava muito lento), você realmente receberia essa mensagem de erro .
O fato de você definir o cron para cada 12 horas não faz diferença - porque a tarefa cron do Drupal está falhando / demorando muito tempo, o Drupal assume que não foi executado e, portanto, tenta executá-lo novamente assim que o cron for invocado. O atraso de doze horas se aplica apenas a execuções cron bem-sucedidas.
A variável cron semáforo não existe mais no Drupal 7 - era para uma versão mais antiga do Drupal. No Drupal 7, não há uma maneira confiável de liberar manualmente um bloqueio, porque o backend de bloqueio pode mudar - no entanto, se você estiver usando o mecanismo de bloqueio principal, poderá liberar os bloqueios cron editando o banco de dados:
DELETE FROM semaphore WHERE name ='cron';
Mas, ao fazer isso, você só conserta os sintomas - o problema que precisa ser resolvido é o motivo pelo qual o cron está falhando / demorando tanto para ser executado.
Estou recebendo esta mensagem, mas, quando executo cron_debug, todos os trabalhos cron terminam com êxito e são executados rapidamente (exceto para atualizações principais que levam ~ 5 segundos). Se a origem desse problema é lenta ou falha nas rotinas cron, por que o cron_debug não as destacaria?
Duvida1
1
Não sei como o módulo cron_debug funciona, então não posso comentar sobre isso. Qual é o valor da variável 'cron_safe_threshold'? Quais dados são a tabela 'semáforo'?
Alice Heaton
1
Esta é a resposta correta para o Drupal 7. +1 para a explicação detalhada.
kiamlaluno
BTW, se o cron estiver falhando, use os módulos Cron Debug para ver em qual módulo ele desliga - 9 vezes em 10 é o módulo Search. Tente desligar o módulo de pesquisa, execute o cron manualmente e veja o que acontece. Para encontrar os nós que está tentando índice: drupal.stackexchange.com/questions/22825/...
Dan Mantyla
4
A cron_semaphorevariável existia no Drupal 6, mas você está usando o Drupal 7, portanto os bloqueios de semáforo foram movidos para uma tabela separada chamada semaphore.
Portanto, a solução para desbloquear o semáforo cron seria:
Variante "Menos extrema" para Drupal 7:drush sql-query "DELETE FROM semaphore WHERE name='cron'"
tanius
2
Você pode depurar o cron usando o módulo Cron Debug .
O Cron Debug ajudará você a encontrar processos cron que
falha devido a erros de programação ou tempo de execução
tempo limite (PHP, servidor, banco de dados)
são muito lentos
O Cron Debug também permitirá que você teste as funções cron específicas, enquanto não executa outras. Isso pode ser bom para o desenvolvimento de funções cron, nas quais você não deseja executar um cron.php completo com toda manutenção, alertas e outras tarefas toda vez que testar sua própria função.
Sim, este módulo é bom, ajuda a depurar o trabalho cron.
Nishant
1
Foi assim que resolvi o problema do cron:
Via PhpMyAdmin, procurei na tabela de semáforo e apaguei a linha em que name = cron
Eu executei "drush cron" via linha de comando
Vi uma mensagem de erro que me deu uma pista do problema; isso pode ser diferente para você, mas para mim, um módulo desinstalado recentemente que estava compartilhando uma biblioteca PHP com um módulo instalado estava causando um erro
// 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);}
Modifique o ifcom um && 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);}
E execute novamente o cron. Isso permitirá que ele funcione.
Por favor, não implante isso e reverta-o novamente depois que terminar. Também ajuda na depuração.
Bem-vindo ao Drupal Answers! A questão é sobre o Drupal 7. A exclusão de linhas dessa tabela do banco de dados não teria muito efeito.
kiamlaluno
Ah, eu apenas adicionei a resposta, pois não havia dito especificamente que era para o Drupal 7 no OP. Isso funciona bem para o drupal 6 e é mais completo que as respostas usuais de 'excluir o semáforo'. Eu achei que seria útil se alguém acabasse aqui do d6. Isso estava errado? Eu pareço ter sido marcado por isso.
Munkiepus 9/09/14
acaba de atualizar para remover o cron prazo da parte de linha de comando, só descobri que pode causar problemas
munkiepus
-1
Você pode depurar usando xdebug, execute cron a partir da interface administrativa Admin> Configuração> sistema> cron.
drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
Respostas:
O semáforo cron provavelmente está bloqueado. Você pode tentar chamar drupal_cron_cleanup () de qualquer lugar do seu código (que não é invocado pelo cron) e que deve desbloquear sua variável de semáforo cron.
Se você tiver o drush configurado no Drupal 6, também poderá tentar:
fonte
cache_bootstrap
.drupal_cron_cleanup()
parece não estar atualizado.Sumário
A mensagem de erro que você está vendo aconteceria se as duas condições a seguir fossem atendidas:
Esta mensagem de erro é, portanto, um sintoma de uma tarefa cron que está falhando ou está demorando muito para ser executada. (Nota: eu sei que você já encontrou o culpado, mas eu queria adicionar uma resposta para as pessoas que encontrarem esta página por meio de pesquisas, como eu).
fundo
A primeira coisa a entender é como as tarefas do cron do Drupal são executadas. O cron Drupal é chamado em intervalos regulares - por meio de um trabalho cron no seu servidor ou após o carregamento de cada página, se você usar o cron do pobre, que é o padrão do Drupal.
As tarefas cron não são necessariamente executadas sempre que o cron é chamado - há uma configuração no Drupal (o padrão é 3 horas) que diz com que frequência as tarefas cron devem ser executadas. Mas esse atraso de 3 horas se aplica apenas se as tarefas cron tiverem sido concluídas com êxito.
No Drupal 7, o cron usa os mecanismos de bloqueio do Drupal , que fornecem um sistema de bloqueio consultivo e cooperativo. Um dos recursos desse sistema de bloqueio é que os bloqueios expiram após um certo tempo. No caso do cron, ele expira após 4 minutos - portanto, se o seu cron for chamado a cada 3 minutos e o trabalho anterior do cron não tiver terminado até esse momento (ele travou ou estava muito lento), você realmente receberia essa mensagem de erro .
O fato de você definir o cron para cada 12 horas não faz diferença - porque a tarefa cron do Drupal está falhando / demorando muito tempo, o Drupal assume que não foi executado e, portanto, tenta executá-lo novamente assim que o cron for invocado. O atraso de doze horas se aplica apenas a execuções cron bem-sucedidas.
A variável cron semáforo não existe mais no Drupal 7 - era para uma versão mais antiga do Drupal. No Drupal 7, não há uma maneira confiável de liberar manualmente um bloqueio, porque o backend de bloqueio pode mudar - no entanto, se você estiver usando o mecanismo de bloqueio principal, poderá liberar os bloqueios cron editando o banco de dados:
Mas, ao fazer isso, você só conserta os sintomas - o problema que precisa ser resolvido é o motivo pelo qual o cron está falhando / demorando tanto para ser executado.
fonte
A
cron_semaphore
variável existia no Drupal 6, mas você está usando o Drupal 7, portanto os bloqueios de semáforo foram movidos para uma tabela separada chamadasemaphore
.Portanto, a solução para desbloquear o semáforo cron seria:
Drupal 7
Drupal 6
fonte
drush sql-query "DELETE FROM semaphore WHERE name='cron'"
Você pode depurar o cron usando o módulo Cron Debug .
fonte
Foi assim que resolvi o problema do cron:
name = cron
fonte
Para o Drupal 8: drush sqlq "DELETE FROM semáforo WHERE name = 'cron';"
fonte
No Drupal 7, como ainda outra opção,
Via
drush cron
eu estava recebendo,Isso estava no ambiente de desenvolvimento e aconteceu porque um cron anterior estava sendo executado e foi interrompido.
Na
includes/common.inc
linha 5413 ou próximo, você encontrará este bloco, https://cgit.drupalcode.org/drupal/tree/includes/common.inc?h=7.x#n5413Modifique o
if
com um&& FALSE
,E execute novamente o cron. Isso permitirá que ele funcione.
Por favor, não implante isso e reverta-o novamente depois que terminar. Também ajuda na depuração.
fonte
Eu já enfrentei isso algumas vezes. No Drupal 6, se você não usar o drush, poderá corrigi-lo assim:
1 Remova as variáveis cron_% da tabela de variáveis.
2 limpe o cache do Drupal em: / admin / settings / performance
pressionando o botão 'limpar dados em cache' na parte inferior da página.
3 execute cron no painel de administração / admin / reports / status / run-cron não execute na linha de comando, pois isso pode causar problemas.
4 Verifique se a próxima execução automática do cron é concluída normalmente.
fonte
Você pode depurar usando xdebug, execute cron a partir da interface administrativa Admin> Configuração> sistema> cron.
fonte