Cron
Le processus Moodle cron est un script PHP, partie intégrante de la distribution standard de Moodle, qui doit être lancé régulièrement. Ce script effectue diverses tâches à différents intervalles programmés.
IMPORTANT ! Ne sautez pas l'étape de configuration du processus cron sur le serveur hébergeant votre installation de Moodle. Votre site ne fonctionnera pas correctement sans lui !
Un programme spécial, habituellement appelé cron, est utilisé pour lancer le script cron de Moodle à intervalles réguliers. Le script cron de Moodle lance plusieurs tâches, notamment l'envoi des courriels, la mise à jour des rapports, des flux RSS, de l'achèvement d'activités, le suivi des messages des forums, etc. Comme ces différentes tâches doivent être lancées à des intervalles différents, toutes les tâches ne sont pas lancées lors de chaque exécution du script cron de Moodle.
Le programme cron (qui lance le script cron de Moodle) fait partie de façon standard des systèmes Unix (y compris Linux et OS X) et est utilisé pour lancer toutes sortes de services dépendant de l'heure. Sous Windows, la solution la plus simple pour répliquer ce comportement est de créer une tâche dans le Gestionnaire des tâches Windows et de la faire lancer à intervalles réguliers. Sur les serveurs mutualisés, il vous faudra trouver la documentation (ou demander de l'assistance) sur la façon de configurer le cron.
Normalement, il s'agit d'ajouter une unique commande à la liste des activités du cron de votre système. Sur les systèmes Unix, cette liste est contenue dans le fichier dénommé crontab, propre à chaque utilisateur.
Discussion générale
Ce paragraphe détaille diverses informations de base. Voyez plus loin pour des instructions propres à votre type de serveur.
Deux étapes sont essentielle pour faire fonctionner le cron :
- identifier la commande correcte à lancer, et
- trouver le bon endroit où lancer cette commande sur votre système.
Comprendre le script cron de Moodle
Moodle a deux façons différentes de déployer le cron, qui utilisent deux scripts différents de l'installation de Moodle.
- Le script CLI (command line interpreter = interface en ligne de commande). Ce script se trouve ici :
/chemin/de/moodle/admin/cli/cron.php
Si vous ne savez pas que faire, c'est ce script que vous devez utiliser. Il nécessite d'être lancé par PHP en ligne de commande sur votre serveur. La commande à lancer ressemblera donc à quelque chose comme/usr/bin/php /chemin/de/moodle/admin/cli/cron.php
Vous pouvez (et devez) tester cette commande à la main pour voir si elle fonctionne. Attention : vérifiez que la version de PHP en ligne de commande est compatible avec votre version de Moodle. Le programme PHP en ligne de commande est différent de celui utilisé par le serveur web et n'est pas toujours à la même version. - Le script web. Ce script est lancé depuis un navigateur web en chargeant une URL qui ressemble à celle-ci : http://mon.site-moodle.fr/admin/cron.php. On peut utiliser un navigateur web en ligne de commande (par exemple wget), et la commande à lancer ressemblera donc à quelque chose comme
/usr/bin/wget http://mon.site-moodle.fr/admin/cron.php
Cette méthode a l'avantage de pouvoir être lancée de partout. Si vous n'arrivez pas à configurer le cron sur votre serveur, vous pouvez ainsi le lancer depuis une autre machine.
Trouver l'emplacement où indiquer la commande
Cette étape dépend du serveur que vous utilisez. Il vous faut donc lire la documentation de votre plateforme ou de votre hébergeur. La plupart du temps, mettre en place le cron de Moodle consiste à déterminer la bonne commande à lancer (voir ci-dessus) et à l'ajouter, avec l'horaire adéquat, à un fichier prévu pour cela, soit en le modifiant directement, soit via une interface spécifique.
Si vous utilisez le script CLI, vous devez également vous assurer que le processus cron est lancé avec le bon utilisateur. Il n'est en revanche pas nécessaire de s'en soucier avec la version web.
Exemple : installation du cron sur Linux Ubuntu/Debian. On suppose que l'utilisateur est connecté en tant que root.
Utiliser la commande crontab pour ouvrir la fenêtre de l'éditeur de crontab pour l'utilisateur www-data. Il s'agit de l'utilisateur qui possède le processus Apache (le serveur web) sur les serveurs Debian
$ crontab -u www-data -e
Cette commande ouvre la fenêtre de l'éditeur. Pour configurer le script cron de sorte à le lancer toutes les 15 minutes, ajouter la ligne :
*/15 * * * * /usr/bin/php /chemin/de/moodle/admin/cli/cron.php >/dev/null
Remarque : la fin de la commande >/dev/null envoie à la poubelle l'output de la commande et évite que vous receviez un courriel toutes les 15 minutes.
Mettre en place le cron sur votre système
Suivant le type de votre serveur :
- Cron sur Unix ou Linux - Services cron sur les systèmes d'exploitation Unix et Linux.
- Cron sur Apple OS X - Utilisez le service crontab comme dans Cron sur Unix ou Linux. Il est cependant aussi possible d'effectuer ceci à la façon OS X, à l'aide de launchd. Pour cela voir Cron sur Mac OS X.
- Cron sous Windows - Services cron sous Windows
- Cron avec des services d'hébergement web- Services cron dans divers exemples d'hébergement web.
Voici des instructions supplémentaires pour des hébergeurs spécifiques (vérifiez qu'elle sont bien à jour) :
Utilisation de services cron tiers
Au lieu d'utiliser votre propre serveur pour lancer le cron, vous pouvez utiliser un service tiers (appelé parfois webcron) :
- EasyCron - Un fournisseur de service webcron qui permet de se passer d'un crontab pour lancer les tâches cron.
Réglages du cron dans Moodle
Certains réglages de Moodle permettent de contrôler divers aspects de l’opération cron :
- Réglages du cron - Réglages du mot de passe du processus cron et du script cron en ligne de commande.
Nouveauté
Moodle 2.7
Cron depuis Moodle 2.7
Le cron a été modifié de manière majeure dans Moodle 2.7, et permet l'exécution de tâches programmées et ad hoc (voir MDL-25499). Les bénéfices de ces changements sont les suivants :
- la programmation de chaque tâche peut être configurée par l'administrateur. Voir Tâches programmées ;
- les tâches peuvent tourner en parallèle ;
- les processus cron utilisent des verrous pour éviter qu'une tâche soit lancées simultanément par des processus différents.
En conséquence, le cron peut être lancé de manière beaucoup plus fréquente (sans risque de blocage), ce qui permet par exemple d'envoyer les messages des forums plus tôt. Il est recommandé de l'adapter à une fréquence d'une fois par minute pour les sites beaucoup utilisés, si l'on souhaite une réactivité optimale (même si cette modification n'est pas indispensable).
Cron distant
L'utilisation de la version web du cron permet de lancer le cron depuis une machine différente de votre serveur Moodle. Par exemple, on pourra utiliser le cron d'une machine Unix pour lancer la version web du cron d'un Moodle installé sur un serveur Windows.
Voir aussi
Discussions sur les forums d'assistance Moodle (en anglais) :
- Cron - can someone give me a quick confirmation of function?
- Cronjob Question
- Slow cron : avoiding simultaneous cron
- Visibility of cron.php
- How to log the output of a Scheduled Task on Windows - this discussion explains a nice trick that can be very useful when you are experiencing problems with your Windows Scheduled Task and you need to log the output of the Scheduled Task to a log file.