# LINUX: Gestion crontab {{INLINETOC}} ## 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. ## Installation de crontab **Crontab** est souvent installé par défaut. ## Configuration de crontab 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. Ne créer qu'un seul des deux fichiers pour 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. Il faut supprimer le crontab de cet utilisateur situé dans /var/spool/cron/crontabs ## Utilisation de la commande crontab ### Afficher la liste des actions Pour afficher le contenu du fichier crontab : $ crontab -l ### Supprimer toutes les actions Pour supprimer toutes les actions du fichier crontab : $ crontab -r ### Editer les actions Pour éditer les actions du fichier crontab : $ crontab -e Le crontab s'ouvre avec un éditeur par défaut. Sous Fedora, c'est vi. Si on veut utiliser nano : $ export EDITOR=nano ## Syntaxes des actions de la crontab ### Présentation Voici de manière schématique la syntaxe à respecter d'un crontab: # 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: 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 : 00 22 * * * /root/scripts/sauvegarde.sh >> sauvegarde.log Exécution d'une commande toutes les 6 heures : 00 */6 * * * /root/scripts/synchronisation-ftp.sh Exécution d'une commande toute les heures : 00 */1 * * * /usr/sbin/ntpdate fr.pool.ntp.org Exécution d'une commande toutes les minutes uniquement les lundis : * * * * 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) : 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 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 MAILTO=""