une première approche de la planification des tâches avec crontab

J'ai choisi de présenter la plannification des tâches avec cron et ces dérivées dans trois articles (pour ne pas scroller une page de trois kilomètres de long) :

  • le premier (celui-ci donc), présente l'usage de la commande crontab
  • un deuxième article suivra bientôt pour présenter plus en détail le paramétrage des tâches en éditant directement les fichiers ainsi que la hiérarchie de fichiers de cron pour le paramétrage des tâches
  • un troisième présentera d'autres programmes "surcouche de cron" complémentaire au fonctionnement de cron (at, anacron)

logo crontab

Tout d'abord cron c'est quoi ?

Pour commencer cron est un service chargé d'exécuter des commandes (nos tâches en l'occurrence). Il permet de définir le moment ou celles-ci seront exécutées (une heure précise, de façon récurrente ou non ...).

Et crontab ?

L'outil crontab permet de gérer le fichier de paramétrage des usagers (par défaut l'usager courant). Pour information toutes les crontab créées par les usagers sont stockées dans /var/spool/cron/crontabs/. Il y a un fichier par usager qui a créé une crontab. Le fichier crontab d'un usager porte le nom de cette usager (par exemple, pour l'usager "toto" il y aura le fichier /var/spool/cron/crontabs/toto).

La crontab d'un usager

Pour créer ou modifier la crontab de l'usager courant (la notre donc) :

crontab -e

Si il s'agit d'une création (première fois que la commande crontab -e est utilisé), cron demandera de choisir son éditeur de texte par défaut :

crontab -e
no crontab for user - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]: 3
crontab: installing new crontab

Le paramétrage d'une tâche via la crontab (en restant simple)

Une fois cette étape passer, nous accédons à notre fichier de paramétrage avec en commentaire le HowTo et notamment la ligne qui présente la syntaxe :

# m h  dom mon dow   command
  • m : minute (de 0 à 59)
  • h : hour (de 0 à 23)
  • dom : day of month (de 1 à 31)
  • mon : month (de 1 à 12)
  • dow : day of week (de 1 à 7, qui correspondent respectivement de Lundi à Dimanche, avec la possibilité d'utiliser le 0 qui correspond aussi au Dimanche)
  • command : la commande à exécuter

Ce qui donne avec des exemples :

# écrire "Hello World" dans le fichier '/tmp/hw.txt' le 1er janvier à 10h05
5 10 1 1 * echo "Hello World!" >> /tmp/hw.txt
# exécuter mon script tous les Lundi à 23h
0 23 * * 1 /path/to/my/script

Et d'autres plus intéressants :

# exécuter une commande ...
# les Lundi et Mercredi
0 23 * * 1,3 command
# tous les jours de travail de la semaine (du Lundi au Vendredi)
0 23 * * 1-5 command
# toutes les 5 minutes
*/5 * * * * command
# toutes les 5 minutes entre 9h et 18h
*/5 9-18 * * * command
# toutes les 5 minutes entre 9h et 18h les Lundi, Mardi, Mercredi et Samedi
*/5 9-18 * * 1-3,6 command

Autant dire que les combinaisons possibles sont nombreuses et "puissantes".

Une fois le paramétrage terminé il ne reste plus qu'à sauvegarder et quitter l'édition du fichier crontab.

Quoi ! Mais attends ! Cela signifie que la commande crontab se contente juste de créer ou de modifier un fichier via un éditeur de texte ?

Oui mais pas seulement ... Cette commande fait aussi une vérification de la syntaxe du fichier au moment de la sauvegarde. Si celui-ci à une erreur il est proposé à l'utilisateur de le modifier à nouveau ou de le mettre de côté pour le retravailler plus tard :

crontab -e
crontab: installing new crontab
"/tmp/crontab.Jvn7gA/crontab":23: bad day-of-month
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n) n
crontab: edits left in /tmp/crontab.Jvn7gA/crontab

On se rend compte que si nous mettons le fichier de côté celui-ci est stoqué dans le répertoire /tmp/ (attention, au prochain redémarrage du serveur ce fichier sera supprimé).

D'autres actions possibles

# Lister le contenu de la crontab :  
crontab -l
# Supprimer la crontab :  
crontab -r
# Travailler sur la crontab d'un autre usager :
crontab -u username -e

Et comme tout les outils bien documenté, nous pouvons obtenir de l'aide avec :

crontab -h  # ou 'man crontab'

A suivre ...

Voilà pour cette vision superficiel et global de cron/crontab. Dans le prochain article sur la crontab je rentrerai un peu plus dans le détail du paramétrage et des erreurs courantes.

By @Mikael FLORA in
Tags : #jobscheduler, #crontab, #cron,