Cron

Attention : vous consultez actuellement la documentation dédiée aux versions 1.x de Moodle. La documentation pour les versions 2.x de Moodle est consultable ici : Cron et celle pour Moodle 3.x est consultable là : Cron.

Cet article a besoin d'une mise à jour. Veuillez SVP le mettre à jour et retirer cette notice une fois la mise à jour effectuée. Si le bloc "Autres langues" (voir pied de page), comprend un lien "English", vous pouvez vous inspirer du contenu anglais.



Certains des modules de Moodle nécessitent de vérifier à intervalles réguliers certains paramètres, afin d'exécuter des opérations. Par exemple, Moodle doit vérifier si des messages ont été postés dans les forums pour envoyer des copies de ces messages aux abonnés.

Le script qui effectue ces contrôles est situé dans le dossier admin. Il porte le nom cron.php. Ce script ne peut pas se lancer tout seul. L'administrateur doit donc mettre en place un mécanisme permettant de le lancer régulièrement (par exemple toutes les 5 ou 10 minutes), selon une méthode expliquée ci-dessous. On donne ainsi à Moodle des « battements de cœur », et le script peut effectuer les opérations définies par chaque module.

Le fichier cron.php parcourt les dossiers de chaque module, et lance les fonctions nommées nom-anglais-du-module_cron, qui se trouvent dans les fichiers lib.php de chacun des modules. Ces fichiers peuvent contenir des fonctions de nettoyage, d'envoi de courriel ou tout autre chose qui doit être effectuée de façon régulière. Par exemple, cron créera les sauvegardes de cours en fonction des paramètres spécifiés dans la configuration de sauvegarde. Il déclenche également tous les envois de courriel des modules ou des forums, mais toutes les fonctions ne sont pas lancées chaque fois que le cron fonctionne. Quelques fonctions, telles que les désinscriptions d'étudiants non connectés depuis longtemps, ou la suppression des logs, sont seulement lancées de temps en temps. Le fichier cron.php a une section qui appellera aléatoirement ces fonctions approximativement 1 fois sur 5.

Il est à remarquer que l'ordinateur effectuant le cron n'est pas obligatoirement l'ordinateur sur lequel Moodle est installé. Par exemple, si vous disposez d'un serveur web qui n'offre pas de tel mécanisme, vous pourrez lancer le cron sur un autre serveur, ou même depuis l'ordinateur de la maison. La seule chose qui importe est de charger régulièrement le fichier cron.php.

L'appel de ce fichier ne surcharge pas le serveur. Une fréquence d'appel de 5 minutes est donc raisonnable, mais peut fort bien être portée à 15 ou 30 minutes. Il n'est pas recommandé de fixer une trop longue période, car cela générera des délais dans l'envoi des courriels, ce qui peut ralentir l'activité des cours.

Avant tout, vérifiez que le script fonctionne en l'appelant directement depuis votre navigateur :

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

Vous devez maintenant mettre en place un mécanisme qui appellera le script à intervalles réguliers de façon automatique.

Lancer le script en ligne de commande

Il est 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).


Remarque : dans le cas d'une tâche cron lancée en local sur une machine linux, et si l'accès au serveur Moodle ne doit pas passer via le serveur mandataire du réseau local, l'utilisateur linux peut avoir l'erreur suivante :

"Connecting to (adresse du serveur)... connected. Proxy request sent, awaiting response...

No data received. Retrying.

Connecting to (adresse du serveur)... failed: Connection refused."

(dans un autre cas, il peut aussi y avoir l'erreur "No gateway")

il faut alors utiliser l'option "--no-proxy" dans l'appel à wget : wget --no-proxy


Même chose avec lynx :

lynx -dump http://monsitemoodle.com/admin/cron.php > /dev/null

On peut également utiliser une version de PHP compilée pour utilisation en ligne de commande. L'avantage est qu'ainsi l'on n'encombre pas les historiques du serveur web avec les requêtes de cron.php. Le désavantage est qu'il faut disposer d'une version spéciale de PHP.

/opt/bin/php /web/admin/cron.php
(Windows) C:\apache\php\php.exe C:\apache\htdocs\admin\cron.php

Attention : depuis Moodle 2.0, pour un appel en ligne de commande, il faut appeler /admin/cli/cron.php au lieu de /admin/cron.php !

Lancer automatiquement le script toutes les 15 minutes

Sur Mac OS X ou Unix : utilisez cron. En ligne de commande, éditez les réglages de cron avec « crontab -e » et ajouter une ligne de la forme :

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

Habituellement, la commande « crontab » lance l'éditeur « vi ». On passe en mode insertion en tapant « i », puis on tape une ligne comme ci-dessus (le plus simple est de saisir au préalable les lignes voulues dans un éditeur plus facile à utiliser, de copier, et d'aller coller dans la fenêtre de l'éditeur crontab). On sort ensuite du mode insertion en tapant la touche <ESC>. Il ne reste qu'à enregistrer et quitter en tapant « :wq » puis en validant, ou à quitter sans enregistrer avec « :q! » puis validation (tout cela sans guillemets).

Sous Windows : la façon la plus simple est d'utiliser le petit programme moodle-cron-for-windows.zip qui rend le processus très simple. Vous pouvez aussi essayer d'utiliser l'utilitaire Windows « Tâches planifiées ».

Chez un hébergeur web : votre interface web de réglages possède peut-être une page vous permettant de mettre en place des crons. Demandez à votre administrateur des détails concernant leur utilisation. Si cela n'est pas possible, il existe des serveurs dédiés gratuits permettant de lancer un cron. Par exemple Onlinecron.

Voir aussi