Documentation technique : Debian
Documentation basée sur la distribution Debian

> > Cron : gestion des tâches planifiées

Cron : gestion des tâches planifiées

Cron est un programme disponible sur les systèmes de type Unix (Linux, Mac Osx ...) permettant de planifier des taches régulières. Il est en effet intéressant que les tâches habituelles soient réalisées automatiquement par le système plutôt que d’avoir à les lancer manuellement en tant qu’utilisateur.

Cron est un démon, il tourne donc en tâche de fond du système. Il peut donc être arrêté, démarré ou redémarrer avec la commande :

  1. /etc/init.d/cron start|stop|restart

Où Cron trouve-t-il les tâches à effectuer

Les tâches Cron peuvent être programmées par l’installation de logiciels ou par les utilisateurs.

Les logiciels installés nécessitant des tâches planifiées les mettent dans les répertoires suivants :

  1. /etc/cron.d
  2. /etc/cron.hourly
  3. /etc/cron.daily
  4. /etc/cron.weekly
  5. /etc/cron.monthly

Télécharger

Comme leur noms l’indiquent les 4 derniers répertoires définissent un intervalle de temps entre les tâches : chaque heure, chaque jour, chaque semaine, chaque mois.

Chaque fichier de ces répertoires sont des scripts (en général bash) qui seront exécutés.

Par exemple, Apache2 installe un fichier /etc/cron.daily/apache2 lançant chaque jour le nétoyage de son cache.

Les fichiers définissant les tâches Cron par utilisateur sont situés dans le répertoire /var/spool/cron. Ils ne doivent pas être modifiés directement mais via la commande crontab

Il existe également un fichier /etc/crontab qu’il n’est pas recommandé de modifier, mais plutôt d’utiliser la méthode précédente (tâches de l’utilisateur).

La syntaxe des fichiers de Cron

Une tâche planifiée dans un fichier de Cron est composée de 3 données différentes :

  • Sa période de répétition définie par 5 données différentes :
    • Les minutes ;
    • Les heures ;
    • Les jours dans le mois ;
    • Les mois ;
    • Les jours de la semaine ;
  • L’utilisateur système sous lequel la tâche sera réalisée ;
  • La commande à réaliser ;

Une commande complète ressemblera donc à :

  1. 59 23 * * * root /home/backup/backup.cmd &> /dev/null

NB : Dans un fichier de Cron pour un utilisateur en particulier (en utilisant crontab), le nom d’utilisateur ne doit pas figurer puisque les actions seront réalisées sous l’utilisateur auquel appartient ce fichier.

Définition de la périodicité

La périodicité est définie en séparant les 5 unités temporelles (minutes/heures/jours dans le mois/mois/jours de la semaine).

Pour chacune de ses unités, les syntaxes suivantes sont utilisables :

  • * : représente chaque unité de temps ;
  • 5 : représente une unité de temps particulière, ici la cinquième ;
  • 5-10 : représente un intervale, chaque unités entre 5 et 10 soit 5,6,7,8,9,10 ;
  • */5 : représente un cycle défini, ici toutes les toutes les 5 unités soit 0,5,10,15... ;
  • 5,10 : représente une série définie, 5 et 10 ;

NB : spécifier les jours peut se faire sur deux valeurs, les jours du mois ou les jours de la semaine, si les deux sont spécifiés, ils sont cumulatifs, les deux seront exécutés.

Le tableau suivant montre quelques exemples :

min heure jour/mois mois jour/semaine Périodicité
* * * * * Toutes les minutes
30 0 1 1,6,12 * à 00:30 le premier janvier, juin et décembre
0 20 * 10 1-5 à 20:00 chaque jour de la semaine (du lundi au vendredi) d’octobre
0 0 1,10,15 * * à minuit les premiers, dixièmes, et quinzième jours de chaque mois
5,10 0 10 * 1 à 00:05 et 00:10 chaque lundi et le 10 de chaque mois

Il existe également certains raccourcis décris dans ce tableau :

Raccourcis Description Équivalent
@reboot Au démarrage du système Aucun
@yearly Tous les ans 0 0 1 1 *
@annually Tous les ans 0 0 1 1 *
@monthly Tous les mois 0 0 1 * *
@weekly Toutes les semaines 0 0 * * 0
@daily Tous les jours 0 0 * * *
@midnight Tous les jours 0 0 * * *
@hourly Toutes les heures 0 * * * *

Le Cron des utilisateurs

Chaque utilisateur du système peut avoir sa propre liste de tâches planifiées. Le moyen le plus simple pour les utiliser est d’utiliser crontab.

Lister sa liste de tâches

La commande suivante affichera la liste des tâches Cron de l’utilisateur en cours :

  1. crontab -l

Éditer sa liste de tâches

Pour éditer sa liste de tâches, l’utilisateur utilisera la commande :

  1. crontab -e

La liste des tâches pour un utilisateur a la même syntaxe que vu précédemment, seul le nom de l’utilisateur ne doit pas figurer puisque la tâche sera réalisée avec l’utilisateur en cours.

NB : Cette commande ouvrira sa table de cron en utilisant l’éditeur indiqué dans les variables d’environnement VISUAL ou EDITOR. Si aucun éditeur n’est spécifié, il utilisera l’éditeur par défaut du système /usr/bin/editor (qui est un lien symbolique vers le bon logiciel).

Modifier la table de cron d’un autre utilisateur

Il est possible de modifier les tâches Cron d’un autre utilisateur si on en a les droits bien entendu (cas du super utilisateur) en spécifiant dans la commande le nom de l’utilisateur avec l’option -u.

Ainsi la commande suivante modifiera la table de l’utilisateur autre_user :

  1. crontab -u autre_user -e

Limiter les tâches Cron à certains utilisateurs

Il est possible de limiter les tâches Cron à certains utilisateurs particuliers ou d’interdire certains utilisateurs à en avoir.

Pour ce faire, en fonction du besoin, on peut créer un des deux fichiers suivants :

  • /etc/cron.allow qui, s’il existe limitera la possibilité d’avoir des tâches cron aux utilisateurs listés ;
  • /etc/cron.deny qui, s’il existe interdira la possibilité d’avoir des tâches cron aux utilisateurs listés ;

Ces deux fichiers n’existent pas à l’installation, il est donc nécessaire de les créer manuellement si besoin.

Les notifications du Cron

Par défaut, à la réalisation d’une tâche du crontab, Cron envoie un email de notification à l’utilisateur en question contenant la sortie complète du script exécuté.

Pour certaines utilisation, cette notification est importante car permet de savoir si les actions se sont passées correctement. Cependant dans d’autres cas, cela peut se révéler ennuyant, surtout si les tâches sont réalisées sur des périodes courtes et donc envoyant des emails en rafale.

La suppression de la notification pour une tâche en particulier

Pour empêcher une tache particulière d’envoyer un email, il suffit d’ajouter à la fin de la commande une directive lui demandant de rediriger la sortie vers rien (/dev/null), il est possible de le réaliser de deux manières :

  • en ajoutant > /dev/null 2>&1 à la fin de la commande ;
  • en ajoutant &> /dev/null à la fin de la commande ;

Le résultat pour ces deux cas est identique, vous ne recevrez plus de mail de notification concernant cette tâche.

Voici un exemple complet :

  1. 59 23 * * * root /home/backup/backup.cmd &> /dev/null

Ou :

  1. 59 23 * * * root /home/backup/backup.cmd > /dev/null 2>&1

La suppression complète des notifications pour un utilisateur

Pour supprimer complètement les notifications par mail pour un utilisateur, il suffit d’utiliser la variable MAILTO dans son crontab.

Au début du fichier de crontab (avant la définition des tâches), il suffit donc d’ajouter la ligne :

  1. MAILTO=""

Il est également possible d’utiliser cette variable pour envoyer les notifications sur un compte email différent que celui, local, de l’utilisateur en cours. Pour ce faire il suffit d’indiquer un email spécifique :

  1. MAILTO="utilisateur@domaine.tld"
  • Auteur :
  • Publié le :
  • Mis à jour : 04/10/13

5 commentaires


Qui êtes-vous ?
Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.