Cron et crontab : le planificateur de tâches !



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=""
Cette page a été vue 32390 fois