Généralités système Linux

Cron et crontab : le planificateur de tâches !

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

crontab





Introduction





Crontab est un outil qui permet de lancer des applications de façon régulière, pratique pour un serveur pour y lancer des scripts de sauvegardes, etc.





L'installation





Bien que par défaut, il soit souvent installé, voici les commandes pour l'installer sur les différentes distributions :





Ubuntu





Code BASH :
apt-get install cron




Fedora/CentOS





Code BASH :
yum install cronie




Calculate Linux





Code BASH :
emerge  -qv sys-process/vixie-cron




Mageia





Code BASH :
urpmi cronie






La configuration





Les fichiers /etc/cron.allow et /etc/cron.deny permettent de définir les droits d'utilisation sur crontab.



Si le fichier /etc/cron.allow existe, alors vous devez être présent dans ce fichier pour être autorisé à utiliser cette commande. Si le fichier /etc/cron.allow n'existe pas mais que /etc/cron.deny existe, alors vous ne devez pas être mentionné dans le fichier /etc/cron.deny afin de pouvoir utiliser cette commande.



Je conseille de ne créer qu'un seul des deux fichiers et ensuite placer le nom des utilisateurs auxquels vous voulez donner/refuser l'accès à la commande crontab.



L'utilisateur root passe outre ces fichiers



Les fichiers /etc/cron.allow et /etc/cron.deny gèrent l'accès à la commande crontab. Cela signifie que si un utilisateur possède un crontab et qu'ensuite on le supprime de liste de /etc/cron.allow, les tâches seront quand même effectuées.

Vous devez supprimer le crontab de cet utilisateur situé dans /var/spool/cron/crontabs






Utiliser la commande crontab





Afficher la liste des actions





Pour afficher le contenu du fichier crontab :



Code BASH :
crontab -l




Supprimer toutes les actions





Pour supprimer toutes les actions du fichier crontab :



Code BASH :
crontab -r




Editer les actions





Pour éditer les actions du fichier crontab :



Code BASH :
crontab -e




Le crontab s'ouvre avec un éditeur par défaut. Sous Fedora, c'est vi. Si on veut utiliser nano :



Code BASH :
export EDITOR=nano
crontab -e




La syntaxe à utiliser est précise.





Guide de survie de crontab : les syntaxes





Voici de manière schématique la syntaxe à respecter d'un crontab:



Code :
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  *  user command to be executed




Le fichier de configuration de est constitué des différentes lignes. Chaque ligne correspond à une action.



Prenons l'exemple suivant :



Code BASH :
mm hh jj MMM JJJ [user] tâche > log




  • mm : minutes (00-59).
  • hh : heures (00-23) .
  • jj : jour du mois (01-31).
  • MMM : mois (01-12 ou abréviation anglaise sur trois lettres : jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec).
  • JJJ : jour de la semaine (1-7 ou abréviation anglaise sur trois lettres : mon, tue, wed, thu, fri, sat, sun).
  • user (facultatif) : nom d'utilisateur avec lequel exécuter la tâche.
  • tâche : commande à exécuter.
  • > log (facultatif) : redirection de la sortie vers un fichier de log. Si un fichier de log n'est pas spécifié, un mail sera envoyé à l'utilisateur local.





Pour chaque unité, on peut utiliser les notations suivantes :



  • 1-5 : les unités de temps de 1 à 5.
  • */6 : toutes les 6 unités de temps (toutes les 6 heures par exemple).
  • 2,7 : les unités de temps 2 et 7.







Exemples





Exécution tous les jours à 22h00 d'une commande et rediriger les infos dans sauvegarde.log :



Code BASH :
00 22 * * * /root/scripts/sauvegarde.sh >> sauvegarde.log




Exécution d'une commande toutes les 6 heures :



Code BASH :
00 */6 * * * /root/scripts/synchronisation-ftp.sh




Exécution d'une commande tous les lundis :



Code BASH :
* * * * 1 /root/script/commande-du-lundi.sh




Exécution d'une commande une fois par an à une heure précise (ici le 25 décembre à 00h15) :



Code BASH :
15 00 25 12 * echo "Le père Noël est passé !"




Exécuter chaque jour, de chaque mois à 2:15 la commande eix-sync



Code BASH :
15 02  * *  * eix-sync






Envoi de mail





Par défaut, cron envoie un message à l'utilisateur qui a planifié sa tâche.



Pour ne pas envoyer de façon automatique ce message à l'utilisateur (ou utilisateur@domaine.ext si un agent tel que postfix a été configuré) il faut indiquer sur la première ligne du crontab -e



Code BASH :
MAILTO=""