Comment puis-je empêcher les tâches cron d'être déclenchées par les visiteurs du site?


12

Les journaux de mon site montrent que cron est déclenché si quelqu'un visite le site Web. Cela ralentit le temps de chargement pour la première visite.

Le cron est configuré pour fonctionner toutes les 3 heures ici: Administration »Configuration» Système »Cron .

Comment puis-je exécuter le cron planifié et non déclenché par les visiteurs?

Réponses:


9

Vous devriez commencer par lire les pages du manuel Drupal sur cron pour obtenir le fond et les commandes à exécuter.

  • Si vous disposez d'un accès shell / SSH au serveur (Linux), vous pouvez exécuter use run crontab -u www-data -epour modifier la table cron pour l'internaute. Vous devriez pouvoir utiliser les détails du lien ci-dessus pour configurer des exécutions de cron appropriées aussi souvent que vous le souhaitez.
  • Si vous êtes sur un hébergement partagé sans accès au shell, vous devrez utiliser le panneau de configuration de votre hébergeur (CPanel, Plesk, etc.) pour vous connecter et ajouter une `` tâche planifiée ''. Cela fournit une interface Web aux onglets cron, donc les mêmes paramètres seront nécessaires.
  • Si ceux-ci ne sont pas disponibles, vous devrez demander à votre hébergeur de vous aider, mais il existe également des services gratuits et payants que vous pouvez utiliser pour appeler la cron.phppage à distance pour vous. Voir Set Cron Job par exemple.

Jetez un œil au module Elysia Cron si vous voulez plus de Cron en général - il a une bonne documentation et vous permet de contrôler finement les tâches qui s'exécutent quand.

Enfin, n'oubliez pas de désactiver le site qui l'exécute lorsque les visiteurs arrivent à Administration »Configuration» Système »Cron lorsque vous avez réussi à configurer cela.


J'ai un accès shell. Je sais comment configurer des tâches cron. Je vais donc le découvrir. Mais merci d'avoir résumé toutes les informations.
cateye

Mais ce que je ne comprends pas, c'est pourquoi Drupal se comporte comme il le fait maintenant. Si la configuration de base est prévue pour exécuter le cron toutes les 3 heures, pourquoi attend-elle un visiteur?
cateye

1
En y pensant. Il n'y a bien sûr aucun moyen pour Drupal d'exécuter un travail cron sans amorçage. Et le bootstrapping se produit lorsqu'un visiteur accède au site. Donc, le résumé est le suivant: si vous voulez des tâches cron vraiment planifiées, vous devez les configurer côté serveur.
cateye

2
Exactement. Rien ne se passe sur un serveur sans que quelqu'un ou quelque chose ne l'exécute. La valeur par défaut de Drupal 7 est d'exécuter cron lorsque les utilisateurs arrivent occasionnellement pour garantir l'exécution des tâches clés. Drupal 6 s'est appuyé sur le module Cron de Poor Man pour le faire en l'absence d'une tâche cron appropriée ... et presque tout dans Drupal a besoin du bootstrap pour se produire en premier. Un bon travail cron sur le serveur est certainement la meilleure option.
Jim Kirkpatrick

1
La RÉPONSE CI - DESSOUS décrit comment y remédier. Pas celui-ci :(
Tomáš Fejfar

13

Drupal 7 a incorporé dans ses modules le code qui se trouvait dans Poormanscron , dont le but est exactement d'exécuter des tâches cron Drupal sur un site où il n'est pas possible de définir des tâches cron, lorsqu'un utilisateur visite votre site, et toutes les X heures (comme défini dans la page que vous avez vue).

Si vous voulez éviter ce comportement, il vous suffit de définir "Run cron every" sur "Never"; contrairement à ce qu'il pourrait paraître, cela influence simplement ce qui se passe lorsque les utilisateurs visitent votre site. [1] Vous pouvez toujours exécuter des tâches cron Drupal depuis l'extérieur de Drupal, en vous rappelant que dans Drupal 7 cron.php doit être appelé, depuis l'extérieur de Drupal, en transmettant la valeur indiquée dans "Administration> Rapports> Rapport d'état".

 

capture d'écran

 

 

 

 

 

[1]: En fait, ni cron.php , ni drupal_cron_run () vérifie la variable Drupal utilisée dans cette page de paramètres. Les seules variables Drupal utilisées sont:

  • "cron_key" qui contient la clé cron utilisée pour éviter que les tâches cron Drupal soient exécutées par des utilisateurs non autorisés
  • "mode_entretien" défini sur TRUElorsque le site est en mode maintenance
  • "cron_last" qui contient l'horodatage de la dernière exécution des tâches cron

La seule difficulté est lorsque le travail cron expire à chaque fois que vous consultez la page et que vous ne pouvez même pas vous connecter en tant qu'administrateur pour le désactiver! soupir ... Je vais le comprendre mais bon de savoir qu'il peut être désactivé, une fois que j'y serai réellement

Oui, j'ai résolu cela rapidement en mettant en place un moniteur de disponibilité Montastic qui "vérifie" l'URL d'activation cron toutes les 6 heures ...
Anders
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.