You are currently viewing Admin Moodle – le truc n°5 : paramétrer le cron de Moodle

Admin Moodle – le truc n°5 : paramétrer le cron de Moodle

Le cron de Moodle semble un grand inconnu, et pourtant il constitue un élément indispensable au bon fonctionnement de ce LMS.

Le premier contact que l’Admin Moodle a avec ce cron est une ligne sybilline dans la documentation officielle traitant de l’installation :

Dernières choses à faire…

Configurer Cron : Les tâches d’arrière plan de Moodle (par ex. envoyer les notifications des forums, sauvegarder les cours) sont réalisées par un script que vous pouvez faire exécuter à des moments précis de la journée. Ce script est connu sous le nom de « cron ». Veuillez vous référer à la documentation sur cron.

Documentation officielle Moodle – https://docs.moodle.org/3x/fr/Installation_de_Moodle

Paf, comme ça, tout sec…

Je me demande combien d’Admins en herbe ne sautent pas simplement ce paragraphe… Un certain nombre quand même, à la vue des problèmes récurrents signalés sur les forums…

Cron ? C’est quoi ?

Commençons par le commencement : c’est quoi un “cron” ? Il est nécessaire de distinguer ce qui est repris dans la documentation officielle de Moodle comme le “processus cron”, qui est en fait un script “cron.php” faisant partie de la distribution de Moodle, du “programme cron”, qui fait lui partie de façon standard des systèmes unix (y compris Linux et macOS) et est utilisé pour lancer toutes sortes de services selon un rythme horaire pré-déterminé.

En d’autres termes, l’Admin devra faire en sorte que le “programme cron” soit programmé de telle manière à ce que le “processus cron” de Moodle soit démarré tous les X temps.

Un symptôme d’un mauvais fonctionnement du cron, souvent lu dans les forums, est le non-envoi par email des messages de forum :

Malgré les réglages “abonnement imposé” etc.. les messages de forum ne s’envoient pas. J’ai lu attentivement plusieurs discussions à ce sujet sur le forum, et j’en ai conclu que le problème venait du cron. J’ai continué ma lecture du forum et de la documentation, mais là je perds pied, je n’arrive pas à activer ce cron.

Danièle Chabrier – 20 juillet 2015 – Forum officiel Moodle – https://moodle.org/mod/forum/discuss.php?d=317020

Que va faire le processus cron de Moodle ?

Moodle est une magnifique pièce de technologie faisant interagir de nombreux composants forts complexes. Certaines de ces interactions sont déclenchées par une action de l’utilisateur : par exemple, l’inscription manuelle d’un nouveau participant au site déclenche l’envoi d’un email vers celui-ci.

Bonjour,

Un nouveau compte a été créé pour vous sur le site « Moodle Test Site » et un mot de passe temporaire vous a été délivré.

Les informations nécessaires à votre connexion sont maintenant :

nom d’utilisateur : christophe

mot de passe : ***

Pour commencer à travailler sur « Moodle Test Site », veuillez vous connecter en cliquant sur le lien ci-dessous.

https://***.coussement.info/login/?lang=fr

(…)

Admin Moodle

email de bienvenue envoyé automatiquement suite à une inscription manuelle

Mais la grosse majorité des interactions sont traitées en “batch” : elles sont stockées dans une liste d’attente dans l’expectative d’un événement déclencheur. Et cette événement provient du fameux “programme cron” déclenché tout les X temps…

Les emails avec les dernières annonces d’un cours ne seront donc envoyés que lorsque le “programme cron” sera actif.

Et si je n’active pas le “programme cron” ?

Vous serez foudroyé sur place !

Non sérieusement, les conséquences ne se feront sentir qu’après un certain temps d’utilisation : les utilisateurs ne recevront pas certains emails, des rapports seront incorrects, le système se ralentira jusqu’à en gêner l’utilisation…

Eventually, if you never run cron, your Moodle site will also stop working so it is important to make sure that this is setup properly. This happened to one of our clients. They had their own people do the installation and they skipped the step of setting up Cron. A year and a bit later, they contacted us thinking someone had hacked their site. It turned out they had just never run the Cron job that does Moodle maintenance.

https://articlebin.michaelmilette.com/moodle-cron/

Brefs autant de raisons pour prendre le problème à bras le corps et activer le “programme cron” !

Comment activer le “programme cron” ?

Pour faciliter la lecture de la suite du texte, nous utiliserons la dénomination adoptée par la littérature : simplement “cron”.

“programme cron” = cron

Il existe plusieurs méthodes pour activer le cron. Cela peut être réalisé soit manuellement, soit automatiquement.

Lancer le cron manuellement

Comme mentionné précédemment, le “processus cron” de Moodle est un script PHP et celui-ci est exécutable via un navigateur ou une ligne de commande.

Lancer le cron manuellement via un navigateur

Tester le cron

Note

Lancer le cron manuellement via un navigateur est la meilleure manière de tester si votre chemin d’accès au script est correct et si celui-ci dispose des accès nécessaires pour être exécuté. N’hésitez donc pas à réaliser cette étape préalablement à une automatisation de l’exécution !

Pour lancer le cron via votre navigateur, certaines adaptations doivent être réalisées au niveau des paramétrages de sécurité, car les réglages par défaut ne le permettent pas.

Dans Administration > Sécurité > Réglages de sécurité du site, vous devez autoriser le lancement du cron par l’intermédiaire d’un navigateur en décochant l’option “Exécution du cron uniquement en mode terminal”. Je conseille très fortement, pour des raisons évidentes de sécurité, de rendre obligatoire l’utilisation d’un mot de passe pour lancer le cron à distance : définissez le mot de passe de l’option suivante “Mot de passe pour lancer le cron à distance”.

Selon le cas :

  • si votre Moodle est installé à la racine de votre site :
http://monsitemoodle.com/admin/cron.php?password=lemotdepasse
  • si votre Moodle est installé dans un répertoire moodle :
http://monsitemoodle.com/moodle/admin/cron.php?password=lemotdepasse

En l’absence du mot de passe que vous aurez définit, vous obtiendrez un message d’erreur :

!!! Sorry, you have not provided a valid password to access this page !!!

Une fois le mot de passe utilisé, le cron de Moodle est lancé et vous devriez obtenir les résultats de l’exécution de celui-ci :

Server Time: Fri, 13 Dec 2019 10:18:29 +0000

Execute scheduled task: Recherche des mises à jour (core\task\check_for_updates_task)
... started 10:18:29. Current memory use 17.9Mo.
Recently fetched info about available updates is still fresh enough, skipping.
... used 0 dbqueries
... used 0.024388790130615 seconds
Scheduled task complete: Recherche des mises à jour (core\task\check_for_updates_task)
Execute scheduled task: Nettoyage des anciennes sessions (core\task\session_cleanup_task)
... started 10:18:29. Current memory use 18.8Mo.
... used 8 dbqueries
... used 0.050218105316162 seconds
Scheduled task complete: Nettoyage des anciennes sessions (core\task\session_cleanup_task)
(...)
Scheduled task complete: Actualisation des flux RSS (block_rss_client\task\refreshfeeds) Execute scheduled task: Supprimer les anciennes entrées d'authentification mobile H5P (mod_hvp\task\remove_old_auth_tokens) ... started 10:18:33. Current memory use 42.3Mo. ... used 1 dbqueries ... used 0.00705885887146 seconds Scheduled task complete: Supprimer les anciennes entrées d'authentification mobile H5P (mod_hvp\task\remove_old_auth_tokens) Cron script completed correctly Cron completed at 10:18:33. Memory used 42.4Mo. 
Execution took 3.944 seconds

Lancer le cron par l’intermédiaire de la ligne de commande

Certains Admins adeptes de la ligne de commande pourraient préférer utiliser celle-ci. Si votre distribution Moodle est installée localement sur votre ordinateur, il vous suffira de lancer votre terminal. Si votre Moodle est installée chez un hébergeur, il sera nécessaire d’autoriser l’utilisation du terminal par l’intermédiaire de votre console d’administration (cPanel ou autre).

Autoriser l’utilisation de la console chez l’hébergeur gandi.fr

Il est alors possible de lancer le script en ligne de commande, avec le même résultat que ci-dessus. On peut par exemple utiliser la commande Unix « wget » :

wget -q -O /dev/null http://monsitemoodle.com/admin/cron.php

Dans cet exemple, le résultat de la commande est détruit (envoyé vers /dev/null).

Lancer le cron automatiquement

Là encore, différentes possibilités s’offrent à vous : utiliser le cron de votre hébergeur, celui d’un prestataire tiers, ou celui de votre ordinateur…

Utiliser le cron de l’hébergeur

Les hébergeurs vous donnent la possibilité d’utiliser le cron tournant sur leurs serveurs. Cette solution est la plus simple car elle vous évite de devoir vous abonnemer à un service tiers ou de laisser votre ordinateur tourner 24/7. Cependant, certains hébergeurs ne permettent qu’un lancement par heure au maximum, ce qui reste encore en général suffisant pour les besoins de Moodle.

A titre d’exemple, je vais utiliser les possibilités offertes par l’hébergeur “gandi.fr”. La configuration reste semblable chez d’autres hébergeurs et, le cas échéant, le helpdesk technique pourra vous aider…

Chez Gandi, rendez-vous sur Simple Hosting > Administration > Panneau de contrôle.

Après avoir introduits les données d’identification demandées, vous accédez à votre panneau de contrôle où vous retrouvez votre “cron” :

Cron dans le panneau de contrôle de gandi.fr

Cliquez ensuite sur “Edit scheduled tasks” afin d’accéder à un éditeur en ligne qui vous permettra d’adapter les paramètres de déclenchement du cron.

Il est bon de noter que Gandi utilise “anacrontab” comme “cron”. La différence est transparente pour l’utilisateur : “anacrontab” permet simplement de lancer plusieurs tâches simultanément…

Il est nécessaire de déterminer le chemin d’accès au script cron.php de votre installation Moodle. Celui-ci se retrouve, comme mentionné précédemment, à l’adresse :

http://monsitemoodle.com/admin/cron.php

Mais il s’agit là du point de vue de votre navigateur, pas de celui du serveur de l’hébergement… Il est nécessaire de définir le chemin d’accès depuis la racine du serveur. Ce chemin sera dépendant de votre hébergeur et du type d’hébergement (dédié ou partagé) dont vous disposez… Le helpdesk technique peut le cas échéant vous aider. Dans le cas de notre exemple (hébergeur gandi.fr et hébergement partagé), notre script se trouve sur le chemin :

/srv/data/web/vhosts/***.coussement.info/htdocs/admin/cli/cron.php

Afin d’exécuter le cron une fois par heure (le minimum permis par Gandi), nous devons rajouter la ligne suivante à notre fichier de configuration :

@hourly 0 my_php_script php -f /srv/data/web/vhosts/moodle.coussement.info/htdocs/admin/cli/cron.php

Déterminer la fréquence

Vous spécifiez la fréquence avec deux paramètres, un index de fréquence et un multiplicateur de fréquence avec deux paramètres, un index de fréquence et un multiplicateur.

Les indices de fréquence sont (du plus petit au plus grand) :

  • Hourly (horaire)
  • Daily (journalière)
  • Monthly (mensuelle)
  • Yearly (annuelle)

Pour déterminer la fréquence de votre action, il suffit de multiplier l’indice par la valeur désirée.

Par exemple, si vous voulez effectuer une action toutes les 2 heures, alors entrez : 2@hourly Si vous voulez qu’une opération ait lieu chaque jour comme sauvegarde de votre base de données, par exemple, vous pouvez la spécifier de plusieurs façons : 24@hourly signifie toutes les 24 heures 1@daily signifie une fois par jour (il peut aussi être écrit @daily sans le multiplicateur, puisque 1 est supposé).

Syntaxe à utiliser

Maintenant que vous savez pour déterminer la fréquence, vous n’avez plus qu’à connaître la syntaxe. Il y a quatre composantes :

  • Fréquence
  • Délai d’attente (timeout)
  • Nom unique
  • Action

Timeout n’est pas utilisé dans la version d’anacron utilisée par Gandi, et sera ignoré. Pour la compatibilité, nous avons besoin de mettre une valeur, cependant. Le nom unique n’est utilisé que pour identifier la tâche à anacron. Ce nom peut être n’importe quoi, et doit être unique. Action est la commande à exécuter. Vous pouvez entrer une ligne de commande comme si vous la tapiez. Vous pouvez même appeler des scripts ou des programmes que vous écrivez, mais cela dépasse l’objectif de cet article…

Une fois cette configuration réalisée, il vous faudra attendre l’heure suivante afin de vérifier si votre script fonctionne…

Vérifier le fonctionnement du script

Afin de vérifier si votre programmation du cron fonctionne, vous pouvez par exemple créer un cours pour l’occasion (sans contenu), vous y inscrire et publier une nouvelle annonce reliée au cours.

Le forum “annonces” d’un cours

L’email correspondant devrait vous parvenir endéans l’heure !

Un second contrôle peut porter sur le rapport des tâches programmées. Rendez-vous sur Administration du site > Serveur > Tâches programmées.

Les tâches programmées dans Moodle

Les dates d’exécution devront vous permettre de conclure si cette exécution s’est produite ou non : si les dates sont trop anciennes ou si “Jamais” est mentionné, cela est plutôt mauvais signe…

Enfin, un troisième contrôle possible est celui des logs, accessibles par l’intermédiaire de votre panneau de contrôle :

Les logs du panneau de contrôle

Vous devriez y retrouver l’ensemble des actions exécutées. La présence de messages d’erreurs est évidemment un mauvais signe…

Accès au fichier de configuration par l’intermédiaire de (s)FTP

Pour les “die-hard” ou pour ceux dont l’accès au script de configuration du cron par l’intermédiaire du panneau de contrôle présente des difficultés (typiquement : des webdesigners dont les clients ne donnent pas accès à l’hébergeur), mais qui ont accès aux fichiers de l’installation par l’intermédiaire de (s)FTP, sachez que le script de configuration est également accessible… Encore faut-il en retrouver le chemin dans vos répertoire : cela dépend encore une fois de votre hébergeur…

En règle générale, sur les serveurs web basés sur Linux (la majorité…), vous retrouverez le fichier de configuration du cron dans le répertoire “etc”. Chez gandi.fr, le chemin d’accès est :

srv/data/etc/cron/anacrontab 

ou

lamp0/etc/cron/anacrontab

Vous pouvez alors ouvrir ce fichier et l’éditer comme indiqué précédemment…

L’éditeur de code

Note

Utilisez n’importe quel éditeur de texte qui préserve les fins de lignes natives comme un éditeur spécifique pour la programmation (BBEdit, Coderunner, …). N’utilisez pas de traitement de texte ! Toute ligne qui commence par un caractère # est un commentaire. Ajouter des commentaires est toujours une bonne idée !

Utiliser un prestataire tiers

Certains SaaS (Software as a service) permettent de lancer le cron à intervalle régulier, par l’intermédiaire de l’adresse du navigateur.

Quelques exemples sont : easycron.com, cronitor.io, cronasaservice.com, …

L’utilisation et la configuration de ces services dépassent le cadre de cet article.

Utiliser son ordinateur

Votre propre ordinateur peut également être utilisé afin de lancer régulièrement des tâches.

Sous Windows, vous pourriez utiliser “Task Scheduler”, et sous macOS, “crontab” en ligne de commande.

L’utilisation et la configuration de ces services dépassent le cadre de cet article.

Mais c’est compliqué tout cela…

Hé oui…

Je ne comprend pas que Moodle Pty Ltd ne mette pas plus l’accent sur l’importance de cette configuration, ou offre d’automatiser (une partie) de la configuration lors du processus d’installation. Je reste persuadé que de nombreuses installation de Moodle tournent sans configuration du cron, avec les conséquences qui en découlent.

Conclusion

Le cron de Moodle est indispensable au fonctionnement correct de celui-ci, et la configuration de son utilisation reste un travail technique auquel l’Admin Moodle devra se consacrer. J’espère que les quelques informations dispensées dans cet article pourront l’y aider…

N’hésitez pas à me contacter si vous avez des questions ou des commentaires sur cet article !