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 :
/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 :
/etc/cron.d /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
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 à :
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 :
crontab -l
Éditer sa liste de tâches
Pour éditer sa liste de tâches, l’utilisateur utilisera la commande :
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
:
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 :
59 23 * * * root /home/backup/backup.cmd &> /dev/null
Ou :
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 :
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 :
MAILTO="utilisateur@domaine.tld"
# Le 31 juillet 2013 à 15:19, par Zoubil En réponse à : Cron : gestion des tâches planifiées
Bonjour,
Seriez vous pourquoi la tâche planifiée sur un serveur ESX 3.5 s’arrête au bout de quelques minutes sans raison apparente. en effet ma tâche lance un script ghettoVCB, c’est un script de sauvegarde de VM, le même script fonctionne correctement quand je le lance manuellement, mais avec le cron il s’arrête au bout de 15 à 20 mn.
Je vous remercie par avance pour votre aide précieuse !!!
Répondre à ce message
# Le 4 octobre 2013 à 15:24, par Quentin Drouet En réponse à : Cron : gestion des tâches planifiées
Tu as entièrement raison, merci de la correction.
Répondre à ce message
# Le 4 octobre 2013 à 19:03, par zoubil En réponse à : Cron : gestion des tâches planifiées
J’ai raison ee quoi ! !! :-) j’ai trouvé un solution !!! C’est de lancer une tâche planifié avec le planificateur de tâche windows qui se logue en ssh putty puis il lance la commande en live.
Cordialement.
Répondre à ce message
# Le 4 octobre 2013 à 19:07, par Quentin Drouet En réponse à : Cron : gestion des tâches planifiées
oups pardon, ce message aurait dû être pour http://technique.arscenic.org/lamp-linux-apache-mysql-php/apache/modules-complementaires/article/mod_geoip-pour-apache-2#forum545
Répondre à ce message
# Le 7 mars 2015 à 11:14, par Jo En réponse à : Cron : gestion des tâches planifiées
bonjours,
j’ai une petite question :
peut-on associer un intervale et une suite dans la définition de période de répétition ?
par exemple :
*/30 0-8,20-23 * * *
voudrait dire, toutes les 30 minutes, de minuit a 8h (y compris donc 8h30) et de 20h a 23h ; et ce tous les jours toute l’année.
c’est correct ?
merci beaucoup
Répondre à ce message
# Le 17 mars 2017 à 16:57, par Nicolas En réponse à : Cron : gestion des tâches planifiées
Bonjour,
Merci pour cette doc utile ! Cependant, une petite question. Admettons que la machine ne soit pas allumée au moment où la tâche cron programmée doit s’exécuter. Cron l’exécute-t-il dès que possible après ou attend-il la prochaine date programmée ?
Merci pour votre réponse.
Répondre à ce message
# Le 17 mars 2017 à 17:13, par Quentin Drouet En réponse à : Cron : gestion des tâches planifiées
Bonjour,
il attendra la prochaine date d’exécution.
Répondre à ce message
# Le 25 juillet 2017 à 09:00, par iznobe En réponse à : Cron : gestion des tâches planifiées
Bonjour , est il possible de programmer une heure de fin de la tache , dans une nouvelle ligne ou la même a une heure différente , si oui de quelle façon svp ?
Répondre à ce message
# Le 26 juillet 2017 à 04:01, par Quentin Drouet En réponse à : Cron : gestion des tâches planifiées
En théorie une tache devrait se terminer seule.
sinon il faut en programmer une qui tue l’ancienne si non terminée par exemple
Répondre à ce message
# Le 15 mars 2018 à 12:48, par Moussa En réponse à : Cron : gestion des tâches planifiées
Une commande lancée tous les jours à 2h30 sera-telle exécutée durant la nuit du changement d’heure au printemps ? Sera-t-elle exécutée deux fois au retour à l’heure d’hiver ?
Merci en avance
Répondre à ce message
# Le 30 mars 2018 à 11:32, par Yohan En réponse à : Cron : gestion des tâches planifiées
Bonjour,
Je dois mettre une tâche planifié qui s’exécute deux fois chaque mois, le premier et le troisième vendredi.
Quelles sont mes options,
Quelle est l’option la plus pertinente ?
Option 1
30 00 1-10 * * 5 /opt/.... 1 >> /opt/s....
30 00 15-25 * * 5 /opt/.... 1 >> /opt/s....
Option 2
30 00 * * 5/2 /opt/.... 1 >> /opt/s....
Merci,
Yohan
Répondre à ce message