Mac4Ever MacGameZone Gadget O'Mac Refurb-Store Mac-LAN : Jouez ! Forum : ...
icon
Vendredi 11 Juillet 2003

Cron, comment ça marche

MacOS > Tutoriaux
Je vous propose dans cet article la série de news portant sur cron rassemblée sous une forme facilement consultable. Un dossier indispensable à tout geek digne de ce nom..
Les News



Introduction 27/06/03

A l'heure où tous les sites de la communauté Mac ne parlent plus que du G5 et de Panther, laissez moi vous parer d'une unixerie solidement ancrée dans OS X, j'ai nommé cron.

Alors, cron, comme son nom ne l'indique pas, est un système permettant l'execution programmée de commandes. Le mécanisme se base sur un démon éponyme (/usr/sbin/cron) qui lit toutes les minutes des fichiers appelés crontabs dans lesquels sont consignées les commandes a éxécuter. Ainsi tous les réglages se font dans les crontabs.

Avant de nous aventurer dans le fonctionnement des crontabs, notons que OS X utilise en fait un autre executable, /System/Library/StartupItems/Cron/Cron, lançé par SystemStarter lors du démarrage. Ce programme lance à son tour le logiciel unix /usr/sbin/cron qui tournera jusqu'à l'extinction de votre système, sans toutefois le perturber (regardez donc son occupation CPU et mémoire dans ProcessViewer..).

Demain nous verrons donc comment configurer les crontabs.

Crontabs: usage général 28/06/03

Les fichiers crontabs dont je vous ai parlé hier sont stockés dans /private/var/cron/tabs. Chaque utilisateur possède un fichier crontab à son nom.

Pour éditer ces crontabs, ne lancez surtout pas TextEdit ! Il existe une commande spécifique nommée... crontab !
Sa syntaxe est crontab [-u user] { -l | -r | -e }.
L'option -r permet de supprimer le fichier crontab, l'option -l de l'afficher et enfin l'option -e de l'éditer. Toutes ces opérations se font sur le crontab du user spécifié et le cas échéant sur celui de l'utilisateur courant.

Vous pouvez créer une liste des utilisateurs autorisés à éxécuter cette commande dans /private/var/cron/allow ou au contraire une « liste noire » dans /private/var/cron/deny.

Enfin l'édition du crontab se fait dans vi selon une syntaxe que nous verrons lors du prochain épisode... (si c'est pas du bon teasing ça..)

Crontabs: syntaxe 29/06/03

Nous savons maintenant ouvrir des crontabs dans l'éditeur vi. Reste à savoir de quel manière s'écrit une ligne compréhensible par cron.

Il existe en fait deux types de lignes. Le premier est simplement une affectation de variable du type:
VAR=val

Les variables que vous pouvez avoir à définir sont par exemple MAILTO, SHELL, HOME.. (pour une liste exhaustive, se référer à man 5 crontab).

Ensuite viennent les commandes programmées. Une ligne de ce type comporte cinq champs définissant l'heure d'execution (suivis de la commande proprement dite). Ces champs sont:
minutes: de 0 à 59
heures: de 0 à 23
jour du mois: de 1 à 31
mois: de 0 à 12
jour de la semaine: de 0 à 7.

Pour les mois et les jours de la semaine vous pouvez utiliser les noms anglais.

Vous pouvez spécifier un intervalle du type 0-4, une liste de la forme 12,16,19 ou encore un intervalle avec un pas: 0-12/2, ce qui est équivalent à 0,2,4,6,8,10,12.

Enfin une astérisque * signifie comme d'habitude « tout », ce qui permet les répétitions d'événements.

Après cela vient la commande, commande unix tout à fait normale.

Je vous proposerai demain des exemples de fichier crontab pour mieux comprendre le fonctionnement...

Exemples de crontabs 30/06/03

Comme promis voici un ou deux exemples de fichiers crontab. Commençons par un fichier crontab typique pour l'utilisateur root:

#on demande à ce que les éventuels mails soient envoyés à l'administrateur:
MAILTO=coco
SHELL=/bin/sh
#on vérifie tous les jours que les droits en écriture sur certains dossiers n'ont pas été redonnés:
0 * * * * chmod g-w / /Users
#Tous les jours à 2H30, lancer le script d'entretien quotidient
30 2 * * * /etc/daily > /private/var/log/daily.out
#Toutes les semaines à 3H00:
0 3 * * 0 /etc/weekly > /private/var/log/weekly.out
#Tous les mois à 3H30:
30 3 1 * * /etc/monthly > /private/var/log/monthly.out


Voilà encore quelques exemples tirés de man 5 crontab:

23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
5 4 * * sun echo "run at 5 after 4 every sunday"
# run at 10 pm on weekdays, annoy Joe
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%


Je rapelle que les symboles % représentent des sauts de ligne.

Conclusion


Ca y est vous connaissez tout sur cron.
Vous pouvez maintenant programmer les taches de maintenance (ou autres choses) pour éviter d'avoir à les lancer manuellement. C'est beau quand il n'y a plus rien à faire, non ?

@ Coco


Les réactions à cet article
Témoignages et avis....
  • Le 11/07/2003, 10:26@ Nauhaie : Et PHP?

    Hello!

    C'est pratique ça, mais comment on fait pour executer un script PHP sur un serveur WEB sous Apache avec Cron?

    Merci

    A+
  • Le 28/10/2003, 18:41@ xchris1 : ./ ou non ./ a l'execution

    Bonjour. Je n'arrive pas a faire execuer par crontab un job (Unix -sh - Solaris) de meme qu'en nommant le job. Je suis sous le bon repertoire, le fichier existe (ls -lrt), il est chmod 777. Si je l'execute en faisant preceder le nom par ./ ca marche. Le nom tout seul ne fonctionne pas. 1/ Je n'arrive pas a trouver pourquoi. 2/ Je ne sais comment mettre dans crontab la sequence ./ devant le nom de procedure. Ca marche pas. Merci si vous avez des tuyaux. Chris
  • Le 23/01/2004, 14:32@ afc : Cronnix !!!

    C'est l'outils qu'il vous faut !
    http://www.koch-schmidt.de/cronnix/docs/welcome.html

    Et c'est en français !

    A+
  • Le 08/03/2004, 01:53@ kiki : rep pour le php

    Tu ne le lance pas par apaxhe mais par le binaire php
    php -q monscript.php
  • Le 09/03/2004, 16:45@ FT : shutdown

    Peux-t-on forcer un shutdown à une heure fixe avec cron ?
    Merci et salutations
  • Le 16/03/2004, 19:19@ funslash : php encore

    quelle commande donné à cronnix pour executer un script php?
  • Le 27/06/2005, 11:35@ alcofribas : cron et sql

    Bonjour,

    Est-ce que je peux utiliser un cron pour déterminer une durée pendant laquelle il est possible aux internautes d'entrer des données dans une ligne de ma base de données, et qui crée une nouvelle ligne une fois le temps écoulé? Un système de cycle en quelque sorte...
  • Le 05/11/2005, 07:08@ LABO : planifier la tâche de connexion à Intern

    Bonjour tout le monde.
    j'ai besoin d'écrie un script qui permettra de palifier la connexion à internet des machine de mon réseau
    merci
  • Le 21/04/2006, 11:00@ Manitra : envoi automatique du rapport de squid

    Comment ça marche et qu'est ce qu'il faudra faire, dans quelle répertoire et quel fichier ?
    Merci de me donner d'informations et des documentations si c'est possible.
  • Le 14/08/2006, 10:28@ loulou : q

    je veut connaitre les diffirents fichiers /var/log/ sous linux et ces fonnctionements
Donnez votre avis
Réagissez à cet article...
 
Si vous cherchez de l'aide ou si vous avez une question à poser, ne réagissez pas ici ! Redirigez-vous vers le forum !
Pseudo/Nom : Email (sera protégé contre le Spam) :
Titre :
Réaction :
Recopiez le code de l'image ci-contre :
Rubriques
  • humeurcreationmateriel
  • logicielsjeuxmacos