Sur les systèmes Unix le programme cron permet de lancer des tâches planifiées. Ce qui rend possible d’exécuter des scripts à une date et heure précise.
Vous pouvez par exemple créer un fichier dodo.php avec une fonction mail qui vous envoie un email sur votre boite personnelle à 23h tous les jours pour vous prévenir d’aller vous coucher car ça fait tard et que si vous continuez à jouer à GTA V vous risquez de ne pas vous réveiller à l’heure le lendemain matin.
Pour que le programme comprenne ça il faut le lui indiquer avec une syntaxe particulière.
minute heure jourDuMois mois jourDeLaSemaine script > log
Syntaxe d’une tâche cron
- minute : la minute (0 à 59)
- heure : l’heure (0 à 23)
- jourDuMois : le numéro du jour dans le mois (1 à 31)
- mois : numéro du mois ou abréviation (1 à 12 ou jan, feb, mar etc.)
- jourDeLaSemaine : numéro du jour de la semaine (0 à 7 -0 et 7 étant dimanche- ou mon, tue, wed etc.)
- script : lien vers un fichier à exécuter par exemple /var/www/dodo.php
- log : un fichier de log que vous pourrez consulter par exemple /var/www/dodo.log
Si vous voulez concaténer les informations dans votre fichier de log il faut utiliser >>
à la place de >
.
Pour rediriger la sortie standard plus les erreurs il faut ajouter 2>&1
en fin de ligne.
Vous pouvez affiner votre timing avec *
, -
, ,
, et /
. Direction Wikipedia pour plus de détails.
Dans notre exemple on lui indiquerait donc :
0 23 * * 0-4 php -f /var/www/dodo.php >> /var/www/dodo.log 2>&1
CronFrequency
Bref tout ça pour dire que la fréquence est difficilement lisible 0 23 * * 0-4
surtout pour une personne lambda.
J’ai donc créé une classe PHP qui permet de transformer cette syntaxe en une phrase compréhensible. Vous pouvez tester l’outil via le lien ci-dessous :
La classe PHP est disponible sur GitHub. Pour l’utiliser c’est très simple, voici un exemple :
$cron = new CronFrequency('0 23 * * 0-4');
echo $cron->toHuman();
Pour une raison ou une autre si cette classe peut vous servir tant mieux !
Bonjour,
ça vaudrait peut être le coup de simplifier le code pour faire ça :
$cron = new CronFrequency(‘0 23 * * 0-4’);
echo $cron->toHuman();
Sinon, la moitié du travail est déjà faite :)
Bonjour Vincent, oui en effet ça éviterait de le faire en amont.
Je ferais un petit update :)
Ahah je n’avais pas vu tout ça!
Jolie Doc,
Merci pour la référence concernant le fichier dodo.php :)
Pas de quoi ^^