Batchs, scheduled tasks et autres crontabs

Cron job icon Dans mon travail je rencontre souvent des cas d’écoles dans la gestion des crontabs et autres batchs. Il y a quelque temps j’ai écrit une documentation des bonnes pratiques afin d’éclaircir ce qu’il convient de faire pour tout le monde. N’ayant jamais croisé un tel guide je le reproduit ici aujourd’hui :

Pour écrire une bonne crontab, il vous faut :

  • un bon script
  • de bonnes habitudes/pratiques

Un bon script

Un script propre est un script :

  • qui écrit ses messages d’informations (suivi du déroulement) sur la sortie standard (STDOUT)
  • qui lit ses données depuis :
    • l’entrée standard (STDIN)
    • un fichier de configuration
    • une base de données
    • les arguments de la ligne de commande
  • MAIS SURTOUT qui écrit ses messages d’erreurs sur la sortie dédiée (STDERR)

Les entrées/sorties doivent être si possible différentiables. En effet STOUT et STDERR sont en général fusionnés dans le même affichage : votre terminal (nous verrons plus bas que ce n’est pas obligatoire)

ex:

Redirection de canaux

Redirection de STDOUT:

Redirection de STDERR :

Produira avec un bon script :

Redirection des deux canaux :

1>&2 : ceci se lit et signifie : STDERR redirigé à l’adresse de STDOUT. (STDOUT=1, STDERR=2, STDIN=0)

Produira avec un bon script :

!!! RIEN DU TOUT !!!

NB: ce genre de pratique n’est pas conseillé dans une crontab car on en récupère pas les erreurs à l’exécution

Redirection de STDIN:

Récupérera les entrées normalement saisies à la main depuis le fichier “mon-fichier-de-données.txt”

Variables Crontab

Dans un fichier de crontab on peux modifier différentes variables de l’environnement utiles à l’exécution :

  • MAIL: adresse e-mail ou sera envoyé toute sortie affichée par la crontab lancée (mettre une mailling list, pas une adresse nominative)
  • HOME: le répertoire par défaut ou va se placer le lancement de la commande
  • PATH: utile si un binaire dont vous avez besoin n’est pas dans le PATH par défaut

NB: attention une seule déclaration de ces variables est possible pour tout le fichier de crontab

ex :

Conclusion

Passez aux BONNES pratiques !!!

On comprend donc que la politique par défaut est de :

  1. Définir une valeur à la variable MAIL
  2. Rediriger STDOUT vers /dev/null (le trou noir, pas d’affichage)
  3. Laisser les messages d’erreur s’afficher pour recevoir un mail en cas d’erreur

Pour plus d’infos https://linux.die.net/man/5/crontab

Tags:

No comments

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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