Gestion des services

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


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
# |  |  |  |  |
# *  *  *  *  *  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 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).
  • 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 :



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




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é !"