Passer au contenu principal

Utiliser la commande crontab

Afficher la liste des actions

Pour afficher le contenu du fichier crontab :

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
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:

Copier vers le presse-papierCode :
# 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 :

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.

Bonus, on a des alias rapides tels que @reboot qui vont nous permettre de lancer une commande au boot de la machine. La syntaxe sera la suivante :

@reboot tâche > log

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=""