Les crons, ou les tâches planifiées sous Linux …
Par Gwenael Dupont, lundi 9 juillet 2007 à 12:24 :: Technique :: #21 :: rss
Sommaire
Un cron, c’est quoi ?
Un cron est un programme informatique qui va permettre de lancer des tâches préalablement planifiées à tel ou tel moment.
Un cron est ce que l’on appelle dans le jargon informatique un démon (« daemon » dans la langue de Shakespeare). C'est-à-dire que c’est un programme qui se lance au démarrage du système et qui attend le moment propice pour s’exécuter, soit lorsque les critères d’exécution d’un évènement sont remplies (voir la crontab). Il se remet en attente après avoir fait son travail, jusqu’au prochain évènement.
D’accord, mais ça sert à quoi ?
A beaucoup de choses ! Planifier ses tâches permet de lancer des scripts de manière automatique, sans avoir à le faire manuellement ! (Eh oui, n’oublions pas que les informaticiens sont par nature feignants… on programme pour en faire le moins possible… c’est pas très cohérent mais c’est comme ça :P ).
Ainsi, notre cron va pouvoir lancer des scripts qui vont faire des sauvegardes automatiques de notre base de données toutes les heures, des récupérations des statistiques de notre site tous les mois, etc… C’est donc très utile pour de l’administration système, mais ça peut aussi être tout à fait utile pour des tâches plus communes, comme envoyer des mails de rappel à telle date, jouer une musique à telle heure, et d’autres choses encore…
…par contre, ça fait toujours pas le café… mais c’est pas loin 
Et la crontab, c’est quoi ?
La crontab est votre table de tâches planifiées. C’est un script qui va contenir une liste de ligne de commandes qui correspondront à vos tâches. Le cron va ainsi avoir à portée de main toutes les instructions qu’il doit exécuter, ainsi que les horaires d’exécution.
Selon le système Linux, la crontab se trouve a un endroit différent :
Suse : /var/spool/cron/tabs/[utilisateur]
Debian et Ubuntu : /var/spool/cron/crontabs/[utilisateur]
FreeBSD et OpenBSD : /var/cron/tabs/[utilisateur]
Notons que le système Debian possède une crontab centralisée dans /etc/crontab
NB : Comme vous pouvez le remarquer, il existe une crontab par utilisateur :).
Comment éditer sa crontab ?
Finie la théorie, nous allons maintenant entrer dans le vif du sujet, l’édition de sa crontab !
Première chose à faire, pour éditer sa crontab, lancer la commande :
crontab -e
Elle permet d’ouvrir la crontab dans l’éditeur de texte par défaut.
Chaque ligne de commande correspondra à une tâche planifiée. Elle se présentera sous la forme suivante :
mm hh jj MMM JJJ tâche > log
mm pour : minutes (entre 0 et 59).
hh pour : heures (entre 0 et 23).
jj pour : jour (entre 1 et 31).
MMM pour : mois (entre 1 et 12, ou les trois premières lettres du mois correspondant).
JJJ pour : jour de la semaine (entre 0 (pour dimanche) et 6 (pour samedi), ou les trois premières lettres du jour concerné. Notons que dimanche est aussi 7).
tâche pour : commande ou script shell à exécuter.
log pour : nom d'un fichier dans lequel stocker le journal des opérations. Si la clause> log n'est pas spécifiée, cron enverra automatiquement un courriel de confirmation. Pour éviter cela il suffit de spécifier > /dev/null.
Pour les 5 premières colonnes (qui sont les unités de temps qui déclencheront le cron), quelques options avancées sont possibles :
Une étoile ( * ) à la place d’une valeur signifiera pour toutes les valeurs de cette colonne.
Ainsi : 00 10 * * * tâche > log à la tâche d’effectuera tous les jours de tous les mois à 10h00.
Un tiret ( - ) entre deux valeurs signifiera toutes les valeurs entre la première et la deuxième valeur.
Ainsi : 00 6-10 * * * tâche > log à la tâche s’effectuera tous les jours à 6h00, 7h00, 8h00, 9h00 et 10h00 (de 6 à 10).
Une virgule ( , ) indique une liste de valeurs.
Ainsi : 00 6,10 * * * tâche > log à la tâche s’effectuera tous les jours à 6h00 et à 10h00.
Enfin, une barre oblique ( / ) indique des valeurs périodiques.
Ainsi, 0-59/2 10 * * * tâche > log à la tâche s’effetuera tous les jours, à toutes les minutes paires de 10h.
Notons que ‘*’ peut être combiné à ‘/’ : 00 10 */3 * * tâche > log à la tâche s’effectuera tous les 3 jours à 10h00.
NB : les lignes commençant par un dièse ( # ) sont des commentaires et ne seront pas traitées.
Important 1 : D'abord, il faut s'assurer que le script fonctionne en mode shell, c'est à dire qu'il est capable de s'executer depuis la ligne de commande. Pour cela, il faut placer dans la première ligne #!/usr/local/bin/php s'il s'agit d'un script php, #!/usr/bin/perl si c'est un script perl, ou #!/bin/bash pour un script shell, puis utiliser la commande chmod 700 script.cgi sur le script. Si vous avez l'accès telnet/ssh, vous pouvez tester son execution avec ./script.cgi
Important 2 : N'oubliez pas d'utiliser la commande "cd /home/login" au début de votre script, ou bien d'utiliser des chemins absolus lorsque vous précisez le nom d'un fichier (par exemple /home/login/texte.txt au lieu de texte.txt), car votre script s'éxécutera dans le répertoire.
Voilà un exemple d’une ligne d’une crontab:
00 10 * * * toto /usr/local/bin/php /home/toto/www/test/back.php
(Tous les jours à 10h00, le script back.php s’exécute.)
Conclusion :
Vous voilà donc prêt à créer vos propres tâches planifiées sous Linux. Ce didacticiel reste sommaire et n’explique que les spécificités pour éditer sa crontab, mais la colonne « tâche » peut être très poussées puisqu’elle peut comprendre un script shell, php, cgi, perl, … à exécuter, et on peut très vite compliquer les choses.
De nombreux sites expliquent ce que sont les crons et comment travailler avec, à vous de parcourir la toile pour rechercher des informations plus techniques.
Sources :
Guide OVH : MutualiseCron
Wikipedia : La crontab et les crons






Commentaires
1. Le lundi 9 juillet 2007 à 19:10, par Jonathan
2. Le mardi 10 juillet 2007 à 09:52, par Gwen
3. Le lundi 16 juillet 2007 à 21:18, par vincent
4. Le lundi 20 août 2007 à 16:35, par pikitup
Ajouter un commentaire