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  -avq sys-process/vixie-cron


Mageia




Code BASH :
urpmi cronie




La configuration




Pour être autorisé à utiliser la commande crontab, il faut que l'utilisateur soit présent dans le groupe cron.

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 toute les heures :

Code BASH :
00 */1 * * * /usr/sbin/ntpdate fr.pool.ntp.org


Exécution d'une commande toutes les minutes uniquement les lundis :

Code BASH :
* * * * 1 /root/script/commandes-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  * *  * /usr/bin/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=""