Como posso impedir que as tarefas cron sejam acionadas pelos visitantes do site?


12

Os logs do meu site mostram que o cron é acionado se alguém visitar o site. Isso está diminuindo o tempo de carregamento da primeira visita.

O cron está configurado para ser executado a cada 3 horas aqui: Administração »Configuração» Sistema »Cron .

Como posso executar o cron agendado e não acionado pelos visitantes?

Respostas:


9

Você deve começar lendo as páginas do manual do Drupal sobre o cron para obter os antecedentes e os comandos para executar.

  • Se você tiver acesso shell / SSH ao servidor (Linux), poderá executar use run crontab -u www-data -epara editar a tabela cron para o usuário da web. Você deve poder usar os detalhes no link acima para configurar as execuções corretas do cron quantas vezes quiser.
  • Se você estiver em uma hospedagem compartilhada sem acesso ao shell, precisará usar o painel de controle do seu host (CPanel, Plesk etc.) para efetuar login e adicionar uma 'Tarefa agendada'. Isso fornece como interface da web para as guias cron, portanto, as mesmas configurações serão necessárias.
  • Se estes não estiverem disponíveis, você precisará pedir à sua empresa de hospedagem para ajudar, mas também existem serviços gratuitos e pagos que você pode usar para ligar para a cron.phppágina remotamente. Consulte Definir trabalho de criação para exemplo.

Dê uma olhada no módulo Elysia Cron se você quiser mais do cron em geral - ele possui boa documentação e permite controlar com precisão quais tarefas são executadas quando.

Por fim, lembre-se de desativar o site que o está executando quando os visitantes chegarem em Administração »Configuração» Sistema »Cron quando você conseguir configurar isso.


Eu tenho acesso ao shell. Eu sei como configurar trabalhos cron. Então, eu vou descobrir. Mas obrigado por resumir todas as informações.
Cateye

Mas o que eu não entendo é porque o Drupal se comporta como agora. Se a configuração básica está programada para executar o cron a cada 3 horas, por que ela espera um visitante?
Cateye

1
A pensar nisso. Não há como desviar para o Drupal nenhuma maneira de executar um trabalho cron sem a inicialização. E a inicialização ocorre quando um visitante acessa o site. Portanto, o resumo é: Se você deseja realmente agendar tarefas cron, precisará configurá-lo no lado do servidor.
Cateye

2
Exatamente. Nada acontece em um servidor sem alguém ou algo executando-o. O padrão do Drupal 7 é executar o cron quando os usuários chegarem ocasionalmente para garantir que as principais tarefas sejam executadas. O Drupal 6 confiou no módulo Poor Man's Cron para fazer isso na ausência de um trabalho cron adequado ... e quase tudo no Drupal precisa que o bootstrap ocorra primeiro. Um trabalho cron adequado no servidor é certamente a melhor opção.
Jim Kirkpatrick

1
A RESPOSTA ABAIXO descreve como corrigi-lo. Não é este :(
Tomáš Fejfar

13

O Drupal 7 incorporou em seus módulos o código que estava em Poormanscron , cujo objetivo é exatamente executar tarefas cron do Drupal em um site onde não é possível definir tarefas cron, quando um usuário visita seu site e a cada X horas (conforme definido em a página que você viu).

Se você deseja evitar esse comportamento, basta definir "Run cron every" como "Never"; ao contrário do que parece, isso apenas influencia o que acontece quando os usuários visitam seu site. [1] Você ainda pode executar tarefas cron do Drupal fora do Drupal, lembrando que no Drupal 7 o cron.php precisa ser chamado, fora do Drupal, passando o valor mostrado em "Administração> Relatórios> Relatório de status".

 

captura de tela

 

 

 

 

 

[1]: De fato, nem cron.php nem drupal_cron_run () verificam a variável Drupal usada nessa página de configurações. As únicas variáveis ​​Drupal usadas são:

  • "cron_key" que contém a chave cron usada para evitar que as tarefas cron do Drupal sejam executadas por usuários não autorizados
  • "maintenance_mode" definido como TRUEquando o site está no modo de manutenção
  • "cron_last" que contém o registro de data e hora de quando as tarefas cron foram executadas pela última vez

A única dificuldade é quando o trabalho do cron atinge o tempo limite toda vez que você visualiza a página e nem consegue fazer login como administrador para desativá-lo! suspiro ... Eu vou descobrir isso, mas bom saber que pode ser desativado, uma vez que eu realmente chegar lá

Sim, eu resolvi isso rapidamente através da criação de um monitor de uptime Montastic que "cheques" o cron ativação URL a cada 6 horas ...
Anders
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.