Le Terminal de Mac OS X : Partie 2
Dans la 1ère partie de cette série, vous avez appris comment paramétrer le système cron en modifiant le fichier crontab. Dans cette deuxième partie, je vais vous montrer comment configurer cron pour qu’il vous envoye, par courrier électronique, un compte-rendu de chacune de ses exécutions.
Tout d’abord, jetons un oeil aux lignes pertinentes situées dans /etc/crontab. Compte tenu du fait que vous ne voulez pas modifier le fichier mais juste le regarder, vous n’allez pas employer un éditeur de texte comme pico. Au lieu de cela, pour afficher des fichiers courts comme celui-là, vous allez employer l’utilitaire cat qui permet l’affichage du contenu d’un fichier sur votre terminal :
[localhost:~] Chris% cat /etc/crontab
Vous devriez remarquer deux choses intéressantes dans cette ligne de commande. D’abord, puisque les permissions du répertoire /etc/crontab permettent à tout un chacun de le lire (seul root peut y apporter des modifications), l’emploi de sudo n’est pas nécessaire.
Deuxièmement, cette ligne de commande vous permet d’avoir accès à un fichier situé dans un répertoire autre que votre répertoire courant en spécifiant, dans ce cas, le chemin d’accès complet (ou absolu) à ce fichier. (Vous n’avez pas eu à taper cd vers /etc pour ouvrir crontab, comme vous l’aviez fait dans la première partie). Un chemin absolu décrit le chemin complet partant du sommet de la hiérarchie du système de fichiers (le répertoire racine ou “/”) jusqu’au fichier.
Enfin, certaines lignes de crontab étant trop longues pour votre fenêtre, vous devrez élargir celle-ci en glissant son coin inférieur droit jusqu’à ce que toutes les lignes s’affichent convenablement.
Observons maintenant la ligne relative à la tâche quotidienne de cron, qui, en fonction de ce que vous avez renseigné dans le tutoriel précédent, devrait ressembler à quelque chose dans ce genre là :
15 17 * * * root sh /etc/daily …
Après les cinq premiers champs relatifs au moment de l’activation réside le champ relatif à l’utilisateur. Dans ce cas le champ utilisateur indique à cron d’exécuter la tâche comme si “root” le faisait lui-même. Ceci est ici nécessaire parce que ces procédures de maintenance exigent un accès privilégié au système seul permis au compte root.
Après le champ utilisateur, le sixième champ indique la commande réelle que cron doit exécuter. La commande, sh/etc/daily, indique à cron d’employer sh, le shell Bourne, et de lancer le script shell appelé “daily“, situé dans le répertoire /etc .
Le script shell est un fichier contenant une série de lignes de commande qui peuvent être exécutées en groupe par le shell. Tout comme un AppleScript, un script shell vous permet de créer et de sauvegarder des procédures que vous pouvez lancer à tout moment, en employant une simple commande. Le script shell /etc/daily a été écrit pour le shell Bourne qui emploie une syntaxe de commande plus adaptée au scripting que celui du shell tcsh, que vous avez déjà employée.
La commande complète relative au lancement quotidien de cron, ressemble alors à cela :
sh /etc/daily 2>&1 | tee /var/log/daily.out |
mail -s "`hostname` daily output" root
Cron, en fait, emploie le shell Bourne par défaut pour exécuter les commandes entrées dans crontab, ce qui signifie que cette commande ne marcherait pas si vous l’aviez lancée manuellement sous le shell tcsh. Pour atteindre l’objectif de cet article, vous n’aurez cependant pas à modifier cette commande. Vous n’aurez pas non plus à la comprendre entièrement, mais ce qui suit vous donnera une idée générale de ce qu’elle fait :
sh /etc/daily 2>&1; |
Cette partie signifie : “Lance le script shell /etc/daily en te servant du shell Bourne et envoie le résultat ainsi que les messages d’erreur sur la commande suivante ” :
tee /var/log/daily.out |
Cette partie signifie : “Ecrit le résultat de la commande précédente dans un fichier et transmet-le aussi à la commande suivante”. (vous pouvez toujours voir les résultats du dernier travail quotidien de cron en regardant le contenu du fichier /var/log/daily.out.)
mail -s "`hostname` daily output" root
Cette partie signifie : “Sers toi du résultat de la commande précédente comme corps d’un nouveau message électronique dont le sujet sera “localhost daily output” et envoie-le à root“. Voilà donc la commande qui permet de tranférer le rapport de cron vers votre boîte aux lettres.
La première étape consiste maintenant à faire en sorte que le message soit adressé à votre boîte aux lettres, au lieu de celle de root. Pour faire cela, vous pourriez remplacer “root” dans cette commande par votre nom de compte, mais ne serait il pas plus simple d’indiquer au système de faire suivre tout le courrier adressé à root vers votre boîte aux lettres ? En employant un fichier .forward, vous pouvez faire exactement cela.
Un fichier .forward n’est rien d’autre qu’un fichier texte contenant nom du compte vers lequel vous voulez que le courrier soit expédié (dans ce cas précis, votre nom de compte). Une fois que le fichier .forward est placé dans le répertoire Départ du destinataire (dans ce cas précis, root), le courrier est expédié comme il se doit.
Par défaut, le répertoire Départ de root conteint déjà un fichier.forward, mais celui-ci fait ne fait pas suivre le courrier vers un autre utilisateur, mais nulle part. Au lieu d’un nom de compte, le fichier .forward de root contient le nom de répertoire /dev/null, qui représente un espace vide Unix. Les flots de données sont adressés vers /dev/null, les messages électroniques inclus, et disparaîssent tout simplement . Les concepteurs de Mac OS X ont supposé que la plupart des utilisateurs n’auront pas accès au courrier de root, et donc, ont employé cette méthode afin que le courrier ne s’accumule pas et remplisse pas inutilement votre disque dur.
Revenons au Terminal, puis, éditer le fichier .forward de root. Vous avez probablement déjà remarqué qu’il n’y a aucun répertoire Départ relatif à root dans le répertoire utilisateurs/ - donc, où est il ? La façon la plus facile de trouver le répertoire Départ de n’importe quel utilisateur est d’employer le raccourci ~ (= répertoire Départ), suivi du nom de compte. Donc, pour changer la liste d’adresses à appliquer au répertoire Départ de root, entrez cela :
[localhost:~] chris% cd ~root [localhost:~root] chris%
Bien, maintenant vous êtes dans ~root, mais où est-ce en réalité ? Souvenez-vous, vous pouvez le découvrir avec pwd :
[localhost:~root] chris% pwd
/private/var/root
Ensuite, employez ls pour voir le contenu de ~root :
[localhost:~root] chris% ls
Desktop Documents Library
Le contenu de votre répartoire ~root sera sûrement différent, mais en tout cas, vous ne verrez toujours pas le fichier .forward. Que s’est il passé ? Un premier indice est le caractère “.” qui est inclus dans le début du nom du fichier. Un “.” en premier caractère d’un nom de fichier signifie que le fichier sera invisible au shell (et à son propriétaire aussi). Mais il est assez facile de voir de tels fichiers cachés, il suffit d’employer l’option -a avec la commande ls.
Les options vous permettent de modifier le comportement d’une commande. L’option -a pour ls dit à ls de montrer “tous” les objets contenus dans le répartoire courant, y compris ceux qui sont cachés (aussi connus sous le nom de “fichiers pointés”). Tapez simplement la commande ls, suivie d’un espace et de l’option -a :
[localhost:~root] chris% ls -a.
. .forward .tcsh_history Library
.. .nsmbrc Desktop
.CFUserTextEncoding .ssh Documents
[localhost:~root] chris%
Encore une fois le résultat de cette commande sur votre machine pourrait être différent, mais vous y verrez maintenant ~root/.forward. Vous pouvez ensuite l’éditer en employant pico. Puisque ce fichier appartient à root, vous devrez aussi employer sudo :

[localhost:~root] chris% sudo pico .forward
D’abord, supprimez la ligne simple du fichier en appuyant sur ctrl + K. Ensuite, tapez votre nom de compte (le nom qui est juste avant “le %” dans le prompt, “Chris” dans notre cas) :

Comme vous avez appris à le faire dans l’article précédent, sauvegardez le fichier avec ctrl + O, pressez retour pour confirmer le nom et ensuite tapez ctrl + X pour quitter pico. Vous en avez fini avec le fichier .forward.
La prochaine étape de la procédure consistera à obtenir le lancement réussi de l’agent de transfert de courrier sendmail quand celui-ci est appelé par l’agent de courrier utilisateur mail (qui, comme vous vous souvenez, est appelé par chaque exécution de cron).
Les clients de messagerie utilisateur (MUA - Mail User Agent) sont des applications qui vous permettent d’envoyer, de recevoir et de travailler personnellement avec vos messages électroniques. Outlook, Eudora et l’application Mail de Mac OS X sont quelques exemples familiers de clients de messagerie utilisateur.
Les MTA (Mail Transfert Agent), par contre, sont des applications moins familières qui reçoivent des messages de la part des MUA et qui les transmettent à d’autres utilisateurs de la même machine, ou à d’autres MTA sur d’autres machines, afin qu’ils soient livrés au destinataire final. Le MTA sendmail inclus dans Mac OS X est un des plus populaires, et il est employé sur de grands et petits serveurs à travers l’Internet.
Ne gérant pas votre propre serveur de mail, vous n’avez pas besoin de lancer sendmail à tout bout de champ. Au lieu de cela, vous devez seulement vous assurer que sendmail se lance correctement quand il est appelé par mail pour envoyer les rapports de cron. Ainsi, sendmail s’arrêtera une fois que la livraison sera faite.
Pour que sendmail soit lancé avec succès, cependant, un aspect de votre système doit être réglé. Par mesure de sécurité, sendmail ne s’exécutera pas avec les permissions par défaut de Mac OS X (nommés “privilèges” dans le Finder), à savoir ceux attribués au répertoire root.
Cela implique un simple changement : l’élimination des privilèges d’écritures assigné au répertoire racine. Le CLI (Command Line Interpretor) permet de voir et de changer toutes les autorisations de n’importe quel article, mais les procédures sont encore trop lourdes pour être détaillées ici. (Bien sûr, “Mac OS X : The missing manual” inclut une étude en profondeur des permissions et du CLI.)
Au lieu de cela, je me concentrerai sur la simple ligne de commande exigée pour lancer sendmail :
sudo chmod g-w /
Puisque vous modifiez les attributs du répertoire root, la ligne de commande doit commencer par sudo. Vient ensuite la commande chmod, pour “changer les modes (d’un fichier)”. Les modes d’un fichier sont les attributs qui spécifient sa faculté à être lu ou écrit, par exemple, et par quelle classe d’utilisateur - le propriétaire de l’objet, son groupe, ou un utilisateur de la machine. (Ces attributs correspondent, bien sûr, aux Privilèges qui sont accessibles via le Finder).
Après un espace viennent “les arguments” du chmod, le premier spécifie le type de modeà changer (ces options ne sont rien d’autre que des arguments). Cet argument indique de prendre le groupe (“g”) et de lui ôter (“-”) sa permission d’écrire (“w”) dans le fichier ou le répertoire indiqué dans l’argument suivant (de nouveau suivi par un espace), qui dans ce cas est le répertoire root, (“/”).
L’étape suivante consiste alors en la ligne de commande suivante :
[localhost:~] chris% sudo chmod g-w /
Une fois que vous l’aurez tapée, sendmail pourra travailler correctement. Cependant, vous devez savoir que Mac OS X est mis à niveau par des installateurs et que certains installateurs d’applications changent les privilèges du répertoire racine redonnant de nouveau les permissions d’écriture au groupe, donc vous devrez retaper cette ligne de commande chmod à chaque fois que cela arrivera.
Pour tester le tout, essayez d’envoyer du courrier à partir du CLI. Employez la commande mail pour envoyer du courrier vers root (qui devrait être réexpédié vers vous) de la manière suivante :
[localhost:~] chris% mail root
Subject:
Vous êtes maintenant à l’intérieur de l’application mail, donc vous ne verrez plus de prompt shell tcsh tant que vous ne quitterez pas mail. Entrez un sujet (n’importe lequel) et pressez ‘retour’. Tapez votre message. Pour terminer votre message, l’envoyer et sortir de mail, tapez ‘retour’, tapez un point “.” et tapez ‘retour’ de nouveau. Vous retournerez alors au shell sans problème :

Après quelques moments, vérifiez votre courrier en tapant la commande mail de nouveau, mais cette fois sans argument. Avant l’arrivée du message, vous ne verrez qu’une chose : que votre boîte est vide :
[localhost:~] chris% mail No mail for chris
Après réception du message vous verrez quelque chose dans ce genre :
[[localhost:~] chris% mail Mail version 8.1 6/6/93. Type ? for help. "/var/mail/chris": 1 message 1 new >N 1 chris Sat Jan 5 15:30 13/374 "Test" &
Vous êtes de nouveau dans l’application mail, mais cette fois pour voir votre nouveau message. Tapez ‘retour’ après le “&” :
Message 1: From chris Sat Jan 5 15:30:01 2002 Date: Sat, 5 Jan 2002 15:30:00 -0800 (PST) From: Chris Stone To: root Subject: Test This is only a test. & q Saved 1 message in mbox [localhost:~] chris%
Comme vous pouvez le voir, le message de test reste dans votre boîte aux lettres Unix locale quand vous quittez mail. Notez que ce message et les autres disparaîtront quand nous aurons suivi la procédure qui va suivre. Cependant, si ce tutoriel vous a guidé pour la première fois dans les arcanes de mail, il est très peu probable que vous ayez d’autres messages. (Bien sûr, votre courrier POP et IMAP resteront sains et saufs).
Vous êtes maintenant prêts à faire en sorte que votre application de gestion de mails ait accès à votre boîte aux lettres Unix locale. Puisque vous allez modifier le dossier dans lequel mail stocke son courrier, ~/Library/Mail, vous devez d’abord en faire une sauvegarde dans, disons, votre dossier Documents. Revenez d’abord à votre répertoire de Départ (si vous en étaiez sorti) et tapez la commande de copie :
[localhost:~ailleurs] chris% cd ~ [localhost:~] chris% cp -R Library/Mail/ Documents/Mail
Voici les points importants de cette ligne de commande :
- Parce que vous copiez un répertoire, cp exige que vous employiez l’option -R (pour “Récursif”).
- Les noms de chemin ne sont pas absolus, mais relatifs à votre répertoire courant. Au lieu d’inclure le nom de chemin complet partant du répertoire root, vous pouvez spécifier, avec des noms de chemin relatifs, un chemin plus court qui part de la fin de votre répertoire courant. (Pensez toujours à omettre le premier / dans les noms de chemin relatifs.)
- Le nom de répertoire cible, Documents/Mail, ne spécifie pas le répertoire dans lequel vous voudriez qu’aille Library/Mail/, mais le nouveau nom de chemin relatif désiré pour copier le répertoire.
- Si cette ligne de commande pouvait parler, elle dirait donc, “S’il vous plaît, faites une copie de tout le contenu du répertoire indiqué par le premier nom de chemin. Quand vous aurez fini, le nom de chemin du nouveau répertoire doit être celui indiqué en deuxième position”.
Autre chose à savoir sur cp est qu’elle ne copie pas correctement les fichiers pouvus de “resource forks”, donc vous ne devrez jamais l’employer pour ça. Vous n’aurez jamais de problème en copiant des applications UNIX et Cocoa et leurs fichiers liés, qui ne pas pourvus de “resource forks”, mais si vous n’êtes pas certains, servez vous du Finder pour copier (ou parcourez “Mac OS X : The missing manual” pour une explication précise de l’emploi de CpMac, qui manipule les “resource forks” correctement).
L’étape suivante consiste à créer le répertoire exigé par mail pour qu’il ne puisse créer un compte de courrier Unix. Le répertoire doit résider dans ~/library/mail/ et être nommé “UNIX:@“. Pour créer un répertoire à partir de la ligne de commande, employez la commande mkdir, suivie d’un espace et du nom du nouveau répertoire.
Cependant, s’il y a pas de répertoire mail à l’intérieur de ~/library, la commande retournera une erreur. Pour empêcher cette possibilité, employez l’option -p de mkdir, ce qui permettra de créer tous les répertoires intermédiaires manquants.
[localhost:~] chris% mkdir -p Library/Mail/UNIX:@
Ensuite vous devrez ouvrir mail et créer un compte de courrier Unix, ce qui exige juste quelques simples étapes :
- Ouvrez l’application mail, située dans le répertoire /Applications. Bien entendu, vous pourriez juste double cliquer sur son icône pour l’ouvrir dans le Finder, mais puisque vous êtes dans le Terminal, comment faire pour l’ouvrir ? Pour ce faire employez la commande suivante (n’oubliez pas d’inclure l’extension à la fin) :
[localhost:~] chris% open /Applications/Mail.app
mail se lance immédiatement, comme si vous l’aviez ouvert dans le Finder.
Si vous n’avez jamais employé mail auparavant et n’avez aucun paramètre de compte email entré dans vos Préférences Système, vous serez invité à créer un compte initial. Au minimum, vous devrez saisir une adresse électronique, donc entrez ce que vous voulez, ceci n’affectera pas l’installation de votre compte de courrier Unix.
Vous pouvez sans risque cliquer sur les autres prompts relatifs au serveur et aux autres renseignements et importer le courrier d’autres applications. Mais rien de tout ceci n’est nécessaire à cette étape.
- Créez un nouveau compte de courrier Unix.
A partir du menu mail de mail, choisissez Préférences et cliquez ensuite sur l’icône des Comptes (account). Dans le paneau des Comptes, cliquez sur Create Account. Pour configurer le compte, vous devrez au moins choisir le type de compte (Unix Account), entrer une description (Local) et entrer quelque chose - ce que vous voulez, en fait - dans le champ SMTP Host.
Bien sûr, si vous deviez créer consciencieusement un compte Unix, tous ces champs auraient leur importance. Cependant, le but étant seulement d’avoir accès à votre courrier Unix local, c’est tout ce que vous avez à configurer :

- Cliquez sur OK, fermez la fenêtre des Préférences et vous voilà prêt.
Si vous utilisez déjà mail pour vérifier régulièrement votre compte POP et IMAP, ce compte complémentaire ne les affectera pas, à part que le nouveau courrier de votre compte Unix arrivera dans votre boîte inbox par défaut. Bien sûr, si vous le voulez, vous pouvez créer une nouvelle boîte aux lettres et une règle permettant aux courriers venant de cron d’y être dirigés.
Maintenant que tout est en place, vous pouvez effectuer un essai. Envoyez un nouveau message de courrier vers root :
[localhost:~] chris% mail root Subject: Test 2 C'est seulement un essai, de nouveau.
.
EOT
[localhost:~] chris%
Basculez vers mail et cliquez ensuite sur Get Mail jusqu’à ce que vous voyiez le message arriver dans votre boîte Inbox :

Si vous voyez le message de test dans votre boîte Inbox, c’est un succès. La prochaine fois que cron effectuera une de ces tâches de maintenance, vous verrez aussi le rapport dans votre boîte Inbox. Par exemple, le rapport de la tâche quotidienne de cron ressemblera à quelque chose comme cela :

Maintenant que ces rapports arriveront régulièrement, vous voudrez probablement être à même de les comprendre. Dans la troisième partie de ces tutoriels, vous explorerez ces scripts en profondeur de manière à en comprendre pleinement le sens et les rapports qu’ils produisent.
Aussi dans cette troisième partie, je vous montrerai comment un Macintosh avec une Connexion Internet permanente peut envoyer ses rapports à n’importe quelle adresse électronique. Jusque-là, continuez à vérifier que vous recevez bien tous les rapports attendus et n’hésitez pas à soumettre vos commentaires ou vos questions.

Textes originaux sur O’Reilly : Learning the Mac OS X Terminal : Part 2
Chargement
Commentaires récents