Articles

Mac

Cron, comment ça marche

Par Contributeur - Publié le

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 ?