Archives pour la catégorie ‘Php’

Comment utiliser Cron? Automatisation des tâches, lancement de script php

24th mai, 2009 par Mikl

Cron est un programme permettant de lancer automatiquement des tâches à des moments précis ou à des intervalles réguliers.  Plus précisément grâce à l’édition d’un fichier stockant toutes les tâches,  il est possible d’exécuter n’importe quelle commande shell. Très pratique donc, par exemple si on désire lancer un fichier php tout les jours à une heure précise. Il tourne en fond (ce type de programme est un daemon sous linux, un processus sous windows) et ne se “reveille” que lorsqu’il doit exécuter quelque chose.
Ce programme n’est néanmoins disponible que sous linux, les utilisateurs de windows pourront se tourner vers Cygwin (qui permet d’emuler un système linux sous windows) pour pouvoir utiliser tranquillement Cron.

Le fichier qu’il faut éditer est ‘crontab’. Pour se faire, il faut tout d’abord choisir l’éditeur de texte avec lequel nous allons l’ouvrir, par la commande suivante:  ‘$ export VISUAL=gedit‘ gedi’ représentant ici l’éditeur souhaité. Maintenant, lancer l’édition du fichier en tapant:  ‘$ crontab -e‘ et y ajouter:

MAILTO=test@test.fr //cette première ligne permet de d’envoyer à l’email choisit un retour fait par cron.

* * * * * commande à exécuter //voici l’exemple de ligne permettant de lançer la commande que l’on désire.

Chaque étoile(*) correspond à une unité de temps: ‘Minute’ ‘Heure’ ‘Jour Du Mois’ Mois ‘Jour De La Semaine’

‘Minute’ Correspond aux minutes par heure, valeurs possibles: 00 à 59.
‘Heure’ Correspond aux heures dans la journée, valeurs possibles: 00 à 23.
‘Jour Du Mois’ Correspond aux jours dans le mois, valeurs possibles: 1 à 31.
‘Mois’ Correspond au mois dans l’année, valeurs possibles: 1 to 12.
‘Jour De La Semaine’ Correspond aux jours de la semaine, valeurs possibles: 0 à 6 ou ‘mon’, ‘tue’, ‘wed’ etc…

Si on met une ‘*’ sans mettre de valeur, Cron considérera qu’il doit lançer la tache pour chaque unité de temps qui correspond à l’étoile. Concrètement, la ligne suivante exécutera la commande choisie (lancement de ‘monscript.php’) chaque minutes et chaque heures de chaque jour de chaque mois:

* * * * * /chemin.vers.php/php mes.fichiers/monscript.php

Pour lancer une commande toutes les 20 minutes par exemple, il suffit de rajouter après l’étoile(*) correspond aux minutes ‘/20′. Il en va de même pour toutes les 20 heures, 20 jours… Il faut juste placer le ‘/20′ à coté de l’étoile correspond à l’unité de temps que l’on désire.

*/20 * * * * /chemin.vers.php/php mes.fichiers/monscript.php —>  toutes les 20 minutes chaque jours chaque mois etc…

00 */5 * * * /chemin.vers.php/php mes.fichiers/monscript.php —> toutes les 5 heures de chaque jours chaque mois etc…

On notera que pour toutes les 5 heures, on rajoute 00 à la place de l’étoile(*) correspondant au minutes. En effet, si on ne le fait pas, cron exécutera la commande à chaque minutes, ce qui n’est pas du tout le résultat attendu.

Enfin, il est également possible de remplacer ‘/20′ par ‘0,20,40′, ce qui donnera:

00 0,20,40 * * * /chemin.vers.php/php mes.fichiers/monscript.php —> toutes les 20 heures de chaque jours chaque mois etc…

Une fois les modifications faites, enregistrer et le fichier puis quitter. Pour tester si tout a bien fonctionner il est possible de lister ce que crontab contient par la commande suivante: crontab -l‘  Notons que si le fichier ‘crontab’ contient une erreur, il sera de toute manière impossible de l’enregistrer.