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
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).
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 » :
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.
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 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 :
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…
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 !