reveil_chien
On peut aussi passer par des méthodes moins orthodoxes, en faisant appel à un fidèle compagnon par exemple.. avec plus ou moins de succès...





En quelques mots, Cron est un service qui, sous Linux (et Unix, et d'autres) permet d'exécuter des scripts ou des commandes à des instants pré-définis (date, heure, récurrence, etc).
Pour ce faire, on renseigne une table Cron (d'où le nom Crontab). Chaque utilisateur déclaré et autorisé peut programmer ses propres taches dans sa Crontab en tenant compte des droits dont il bénéficie. Pour les opérations requérant les droits "root", on peut soit utiliser la Crontab de root, soit pour plus de sécurité, créer un utilisateur pour la circonstance.

Dans une ligne de Crontab, la première partie est composée de 5 champs "date et heure" que nous allons détailler plus bas, et de la commande (ou script) qui doit être exécutée par Cron.

Une ligne de table ressemble à ceci (il n'y a jamais 5 astérisques/étoiles) :

*  *  *  *  *  /arborescence/script_ou_commande



Généralement, on insère une ligne commentée avec quelques infos :

## ligne de descriptif commençant par un ou deux "dièse"
*  *  *  *  *  /arborescence/script_ou_commande




Lecture et édition de la table Cron de l'utilisateur en cours

  • Avec la commande "crontab -l" (l comme Lecture), l'effet est similaire au rendu d'une commande "cat" et la "crontab" de l'utilisateur en cours est affichée.
  • Avec la commande "crontab -e" (e comme Écriture), l'effet est similaire à un "Vi" de la crontab, on se retrouve donc dans un Vi classique (s'il s'agit de l'éditeur par défaut) avec les commandes qui en découlent.




Détails de la crontab


Considérons les 5 étoiles de la crontab. Elles sont normalement séparées d'un espace simple, ci-dessous on aère un peu pour une meilleure compréhension :

   *    |    *   |        *        |        *        |           *           |

Minutes | Heures | Jour(s) du mois | Mois de l'année | Jour(s) de la semaine |



Les deux premières étoiles, soit donc "minutes" puis "heures" ne devraient pas poser de souci, un exemple pour exécution tous les matins à 7 h 30 :

30  7  *  *  *   /arborescence/script_ou_commande



La dernière étoile (jour de la semaine) devrait être facile elle aussi, toujours avec le même exemple mais le lundi seulement, à 7 h 30 :

30  7  *  *  1  /arborescence/script_ou_commande

Note : Le dimanche peut -être déclaré sous le numéro 0 (zéro) ou 7.


Pour affecter une plage de jours de la semaine (toujours sur la dernière étoile). Ici du Lundi au Vendredi à 7 h 30 :

30  7  *  *  1-5  /arborescence/script_ou_commande



Bon, on complique un peu avec la 3eme étoile (jour du mois), par exemple pour une exécution à 5h30 le 1er et le 15eme jour du mois :

30  7  1,15  *  * /arborescence/script_ou_commande

Note : Si vous affectez une valeur de 31 à la 3ème étoile, la tache ne sera pas effectuée les mois qui n'ont que 30 jours (Idem pour Février).


Supposons maintenant que cette action ne soit à effectuer que pendant le mois de Juillet (oui, c'est tiré par les cheveux, mais c'est pour l'exemple). On utilise la 4ème étoile :

# a executer chaque 1er et 15 du mois à 7h 30 du matin en Juillet
30  7  1,15  7  *  /arborescence/script_ou_commande



Et pour finir en beauté dans le presque absurde, supposons que l'action soit a effectuer tous les quart d'heure, de 8h a 17h, du 1er au 15eme jour du mois, de Juin a Septembre, du lundi au vendredi inclus (il vaut mieux commenter je crois) :

## execution toutes les 15 minutes, de 8h a 17h, du 1er au 15eme jour du mois 
## de Juin a septembre, du lundi au vendredi 
0,15,30,45  8-17  1-15  6-9  1-5   /arborescence/script_ou_commande




Cas particulier - Utilisation du caractère pourcentage " % " dans une ligne Crontab


Ceux qui ont déjà essayé de glisser une commande complexe, incluant une ou plusieurs variables (avec le caractère " % " dans une ligne Crontab), l'auront surement déjà remarqué. Ça ne fonctionne pas, bien que la commande soit juste, puisqu'elle marche si on l'exécute dans un terminal.
En fait, il y a une petite astuce pour régler ce problème, il suffit de faire précéder le " % " d'un antislash " \ ". Pour l'exemple :

  • Si votre commande originale est :
# echo $(date +%R)


  • Elle doit, dans la crontab, devenir :
*  *  *  *  *   /bin/echo $(date +\%R)





Liens utiles :





Vous pouvez commenter ou participer à l'amélioration de cet article via le topic dédié du forum.