Cron : syntaxe de la fréquence lisible

Tâche cronSur 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 :

CronFrequency Tool

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 !

Share Button

Un commentaire

  1. 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 :)

    Reply

Laisser un commentaire.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.