Gérer des événements récurrents sur Mac

Méthodes et exemples

PBell

Comment déclencher automatiquement des actions à intervalles réguliers

- Titre : Gérer des événements récurrents sur Mac

- Auteur : PBell

- Parution : 20 décembre 2013

- Mise à jour : 20 décembre 2013

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 PBell. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Préambule

- II. Actions à intervalles constants avec le calendrier iCal

- III. Actions à intervalles complexes avec le calendrier iCal

- IV. Répéter des actions avec CRON

- IV-A. Utilisation de CronniX

- IV-B. Utilisation de CronniX via le Terminal

- V. Quelques éléments à propos de Launchd

I - Préambule

Dans la majorité des cas, vous déclenchez vous-même, via la souris ou le clavier, des actions sur votre Macintosh : ouvrir une application ou un document, enregistrer, copier…

Dans certains cas, vous souhaitez que des actions démarrent automatiquement en fonction d'autres actions ou à intervalles réguliers.

- prendre des photos toutes les cinq minutes avec votre caméra intégrée ;

- grouper ces photos dans un film une fois par semaine ;

- mettre à jour quotidiennement vos programmes TV ;

- jouer de la musique chaque matin en guise de réveil (sauf les jours fériés !) ;

- vous rappeler, par mail, une semaine avant, un anniversaire de vos contacts ;

- redémarrer votre centre multimédia une fois par semaine (il faut bien nettoyer les caches de votre machine, si elle reste allumée en permanence!) ;

- exécuter une ou plusieurs tâches en fonction de votre agenda ;

- vider votre corbeille ;

- mettre à jour votre serveur quotidiennement.

Je vous laisse le soin de compléter cette liste en fonction de vos souhaits.

Le but de cet article est d'expliquer les méthodes de déclenchement automatique disponibles pour un utilisateur débutant ou avancé.

Sur Macintosh, il y a principalement trois méthodes, de la plus simple à la plus complexe :

- créer et utiliser des événements, répétitifs ou non, dans le calendrier iCal ;

- utiliser la fonction de base Unix, CRON, (avec ou sans interface graphique) ;

- utiliser les fonctions launchd spécifiques à Apple, liées aux deamons, parties intimes du fonctionnement du noyau Unix, lui-même supportant Mac OS X.

Dans cet article, nous aborderons en détail les méthodes, iCal, Cron avec interface graphique, suffisantes pour tout utilisateur qui ne se lance pas dans la programmation complexe.

Cron avec le Terminal et launchd seront survolés dans les deux derniers paragraphes, pour vous donner les points d'entrée de vos investigations. Je précise que plus de 90 % des cas se ramènent en fait à des demandes simples qui peuvent être résolues avec une interface utilisateur simple, à la portée de tous.

La première question à se poser est : à quelle fréquence l'action doit-elle être répétée ?

Toutes les secondes, toutes les heures, certains jours, etc.

Voici quelques conseils basés sur l'expérience.

Si la fréquence de répétition est faible (une fois par mois, par semaine, par jour, deux fois par jours) , préférez la méthode du calendrier iCal. Votre calendrier reste visible et exploitable. C'est le cas aussi si la répétition n'est pas régulière, mais dépend d'autres paramètres ou calculs.

Si les répétitions doivent se faire plusieurs fois par jour, et jusqu'à quelques minutes d'intervalle, de façon très régulière, utilisez la méthode CRON. Votre calendrier serait illisible. Avec CRON, les paramètres restent simples et lisibles, surtout avec l'interface graphique.

Enfin, si la répétition est de l'ordre de la minute, la meilleure méthode est le launchd qui est balayé par le noyau du système en permanence.

Enfin, les tâches iCal et Cron avec interface se limitent à l'environnement utilisateur. Si les tâches nécessitent un autre niveau d'autorisation (administrateur), préférez launchd.

Ceci étant, ces recommandations sont générales et peuvent être transgressées. Time Machine est un superbe contre-exemple, avec une répétition par heure, mais pourtant géré par launchd ! Il est vrai que Apple promeut Launchd face à CRON…

Tous les exemples de cet article ont été testés sur un iMac27 (i7, Snow Leopard). De nombreux tests (mais pas tous !) ont été faits sur un iMac20 (Core duo, Snow Leopard) sur un Power Mac (G5 bipro, Tiger) et sur un iMac24 (i5, Mountain Lion). Aucun test n'a été fait sur Mavericks.Tous les exemples et codes sont libres d'utilisation.

II - Actions à intervalles constants avec le calendrier iCal

Avec tous les Macintosh, Apple fournit une application souvent sous-estimée, iCal.

Outre la gestion classique d'un calendrier, elle permet de gérer des événements qui peuvent lancer des scripts. De plus, il est possible de commander iCal lui-même par des scripts.

Dans ce paragraphe, nous verrons les événements à intervalles réguliers, mais aussi les tâches dont l'occurrence suivante est déterminée par des calculs.

Supposons, pour commencer, que nous souhaitions lancer, chaque jour à heure fixe, une tâche précise.

Ouvrons l'application iCal. Il est fortement conseillé de commencer par créer un calendrier des tâches automatiques. Ce n'est pas indispensable, mais cela évite de « polluer » votre calendrier réel avec ces actions répétitives.

Ce calendrier des tâches automatiques ne sera bien sûr pas synchronisé avec iCloud ou vos iDevices, car les scripts de votre Mac ne fonctionneront pas sur iOS.

Une fois ce calendrier créé avec un nom adéquat (par exemple « script ») nous allons créer, dans ce calendrier, un événement. Voici la fenêtre standard de création d'un événement :

Donnez à votre événement un nom qui vous permette de l'identifier clairement. Ce sera utile lorsque vous aurez de nombreux événements sur ce même calendrier. Préciser la date et heure de début. L'heure est celle qui sera utilisée à chaque occurrence.

Dans la rubrique « Répéter », indiquez la fréquence de répétition, jour, semaine, mois, année. Si vous choisissez « Personnaliser », vous pouvez demander tous les x jours, semaines, mois ou années. Vous pouvez aussi aussi définir les jours de la semaine (évitez de faire sonner votre réveil à 7 h le dimanche !).

Dans la rubrique « fin », indiquez « jamais » ou une date de fin si nécessaire.

Enfin, dans la rubrique « Alarme » remplacez le message avec son par « Exécuter un script ». Dans la rubrique qui suit, sélectionnez « autre » pour sélectionner votre script préalablement écrit (la tâche que vous souhaitez accomplir).

La fenêtre devrait ressembler à ceci :

Cliquez sur le bouton « Terminer » pour valider l'enregistrement.

Qu'en est-il du script sélectionné ?

Le script sélectionné doit être un script AppleScript (et pas un script enregistré comme application). Cela peut sembler restrictif, mais cela ne l'est pas, car AppleScript peut lancer n'importe quel autre type de script :

-- Script lancé par iCal en mode répétitif
-- Pour lancer un script via le shell Unix
set Mon_Resultat to do shell script "Shell_Script"

--Pour lancer une macro VBA
tell application "Microsoft Excel" to run VB macro "Ma_Macro"

Dans cet exemple, Shell_Script doit représenter une instruction valide pour le Shell Unix. Par exemple :

- un Processus Automator via la commande : automator xxx.workflow ;

- un script PERL via la commande : perl xxx.pr ;

- un script Phyton via la commande : python xxx.py.

Dans ces expressions, « xxx » représente le fichier contenant le script du langage choisi. Le chemin d'accès et le nom doivent répondre à la syntaxe Unix (chemins séparés par des « / » et noms avec caractères spéciaux d'échappement). L'utilisation des instructions AppleScript « quoted form of » qui place entre guillemets l'intégralité des noms ou chemins, ou encore l'instruction POSIX path, vous permettent de résoudre efficacement ces points.

Pour les adeptes de la programmation VBA (langage Microsoft pour Excel, Word, PowerPoint), la seconde instruction « run VB macro » permet le lancement d'une macro VBA à partir de AppleScript. Elle présuppose que le document Excel contenant la macro est ouvert, ce qui peut être fait au préalable par une instruction ouvrant ledit document.

À ce stade, votre script va s'exécuter chaque jour, à 10 heures (voir fenêtre événement), et ce jusqu'à la fin des temps (ou plus probablement jusqu'à la fin de vie de votre Macintosh !).

Il y a cependant quelques règles de bon sens à rappeler.

- Votre machine doit être allumée à l'heure dite ! Il n'est pas très écologique de la laisser allumée en permanence, bien que les versions récentes des machines ne consomment qu'une poignée de watts en veille (j'ai mesuré la consommation de mon Mac Mini 2007 en veille à 4 W environ, 12 W en fonctionnement et des mesures sur la version haut de gamme i7 / 2012 indiquent 18 W en marche, soit, pour 8760 heures par an, de l'ordre de 90 €/an).

- Vous pouvez, via les préférences système, onglet économiseur d'énergie, bouton « Programmer », définir des heures d'allumage/extinction. C'est écologique, mais il faut bien synchroniser ces heures avec celles de vos scripts. N'oubliez pas alors aussi de cocher, dans ces préférences, « Démarrer automatiquement après une panne de courant ».

- Votre script doit fonctionner sans avoir besoin de vous ! Si votre script vous demande de confirmer quelque chose, il faut que vous soyez devant l'écran et alors, à quoi bon le rendre automatique.

- Votre script doit avoir une bonne gestion des erreurs. Il se déroula probablement sans que vous voyiez quelque chose. Donc pensez éventuellement à faire un log ou à vous envoyer un message e‑mail ou notification en cas d'erreur ou de succès.

Dans certains cas, la fonction iCal « Répéter » peut être restrictive. Par exemple, si vous souhaitez répéter l'opération le premier mercredi de chaque mois, ou encore chaque jour pair qui suit un dimanche : cela, iCal ne le permet pas directement.

Directement non, mais indirectement oui, comme nous allons le voir dans le prochain paragraphe.

III - Actions à intervalles complexes avec le calendrier iCal

Il est possible d'utiliser des calculs plus complexes pour déterminer quand la prochaine occurrence doit avoir lieu. Comment ? Tout simplement via AppleScript.

Le principe est simple : le premier événement iCal est créé sans répétition, il lance le script, et ce script contient, outre la fonction voulue, une partie supplémentaire qui détermine quand la prochaine occurrence doit avoir lieu.

Le script génère alors un nouvel événement iCal, à la date et l'heure ainsi calculées.

Voici un script qui génère un événement iCal à une date variable, événement qui déclenchera alors ce même script pour récréer l'événement de la prochaine occurrence.

Il présuppose que vous ayez créé un calendrier nommé « Script » dans iCal, comme recommandé au paragraphe précédent.

Ce script contient également un sous-programme de « log », permettant de laisser une trace de l'exécution dans un fichier texte :

property Mon_Cal : "Script" -- Nom du calendrier
property Titre_Event : "Mon événement répétitif " -- le titre de l'événement répétitif

-- Programme principal pour exécuter la tâche voulue
-- Mettre les instructions ci-dessous

-- Enregistrement d'une trace d'exécution, indiquant que la tâche voulue s'est bien exécutée
log ("Mon opération s'est bien déroulée le " & ((current date) as string))

-- Une fois la tâche principale effectuée, on définit la date et l'heure de la prochaine occurrence.
-- Dans cet exemple, ajout de 10 heures et arrondi à l'heure pleine
set Heures to 10
set Ma_Date to current date
set Ma_Date to Ma_Date + (Heures * hours)
set minutes of Ma_Date to 0
set seconds of Ma_Date to 0

-- Détermination du chemin de ce script afin de l'insérer dans le prochain événement
set Mon_Script to path to me
-- Création du prochain événement
tell application "iCal"
tell calendar Mon_Cal
set N_Event to make new event at end with properties {description:Titre_Event, summary:Titre_Event, start date:Ma_Date, allday event:false}
-- Ajout du script à exécuter : ce script !
tell N_Event
make new open file alarm at end with properties {trigger interval:0, filepath:POSIX path of Mon_Script, trigger date:Ma_Date}
end tell
end tell
end tell
log ("création de la prochaine occurrence pour le " & (Ma_Date as string))

-- fin du programme principal

-- sous-programme d'enregistrement d'un message dans un fichier texte sur le bureau
on log (msg)
set the my_log to ((path to desktop) as text) & "mon_journal.txt"
try
-- Ouverture du fichier texte : Le Finder le crée si besoin
open for access file the my_log with write permission
write (msg & return) to file the my_log starting at eof
close access file the my_log
on error
try
close access file the my_log
end try
end try
end log

Enregistrez ce programme sous forme de script (extension « scpt ») , puis exécutez-le une fois. Il va alors effectuer la tâche que vous avez insérée dedans, puis il va générer dans iCal l'événement pour son prochain lancement.

Dans l'exemple ci-dessous, le script va s'exécuter toutes les 10 heures (date/heure d'exécution + 10 heures). Le calcul de date/heure peut être beaucoup plus complexe si tel est votre besoin.

Voilà, vous savez maintenant lancer des scripts automatiquement, soit en les ajoutant dans iCal avec les fonctions standard, soit via des scripts qui génèrent eux-mêmes des événements.

Pour ceux qui manquent d'idées, j'utilise la création automatique d'événements pour les anniversaires, mais contrairement au calendrier d'anniversaire standard Apple, je peux ainsi sélectionner les groupes de contacts et appliquer des alertes différentes : e‑mail professionnel le jour même pour les contacts professionnels et e‑mail sur adresse personnelle 10 jours avant pour avoir le temps d'acheter un cadeau. Une fois le concept compris, la limite est celle de votre imagination !

Même avec un événement répétitif standard, j'ai constaté parfois, sur certaines versions iCal et OS X des bogues entraînant un mélange des tâches (date et mode de répétitions) et des scripts : le script 2 est lancé avec la tâche 1. C'est rare, non reproductible, mais cela existe.

On s'en aperçoit dès la première occurrence de l'événement. Dans ce cas, il suffit de supprimer l'événement et de le recréer dans iCal.

Si vous souhaitez une fréquence de répétition supérieure à la journée, par exemple matin et soir, vous pouvez aussi créer deux événements répétitifs dans iCal, sans passer par un script. La limite est simplement celle de la lisibilité de votre calendrier.

IV - Répéter des actions avec CRON

CRON est un ensemble de fonctions standard de tout système Unix. C'est donc aussi disponible sur OS X.

En mode Unix, via le terminal, cela peut être fastidieux, mais fort heureusement, des développeurs (anonymes - merci à eux) ont écrit un logiciel libre qui permet l'accès à ces fonctions avec une interface utilisateur digne d'Apple par sa simplicité.

En effet le logiciel CronniX est gratuit (télécharger via notre ami Google en cherchant « cronnix Mac »).

CronniX n'accède pas à toutes les subtilités possibles de CRON, mais permet déjà beaucoup.

Nous allons, dans la suite, séparer l'utilisation de CRON, via CronniX, puis via le Terminal, pour les puristes.

IV-A - Utilisation de CronniX

Une fois ce logiciel installé dans votre dossier Utilitaires ou Applications, lancez-le. Une fenêtre apparaît avec la barre d'outils suivante :

La liste sous cette barre est sans doute vide pour l'instant. Les boutons Nouveau, Effacer, Ouvrir, Enregistrer et Édition sont suffisamment explicites.

Il se peut que le CRON courant soit vide (Cron pour l'utilisateur). Dans ce cas, il faut ouvrir le compte d'un utilisateur avec le bouton Ouvrir et indiquer votre utilisateur (ici je suis imac27). Lors de cette opération, il est probable que CronniX vous signale qu'aucun fichier CRON n'existe, mais votre validation va le créer.

Petite particularité : les menus de CRON permettent de voir le CRON du système. Ne pas confondre avec le CRON du Root. Il semble que cette fonction ne marche plus depuis Leopard.

Ce n'est pas gênant dans la mesure où, par sécurité, nous n'allons changer que le CRON utilisateur et pas celui du système.

Pour créer une nouvelle tâche répétitive, il faut cliquer sur Nouveau (étonnant, non ?).

Une nouvelle fenêtre apparaît avec trois onglets : Simple, Intervalles, Expert.

Chacun donne accès à l'une des fenêtres ci-dessous (celle du milieu, Intervalles, n'est pas fonctionnelle).

Nous n'utiliserons que la fenêtre « Simple ». Vous pouvez régler les minutes, heures, jours du mois, mois et jours de la semaine. Pour chacun, il faut soit entrer une valeur, soit utiliser le curseur qui limite aux valeurs possibles (les mois de 1 à 12, les jours de 1 à 31…)

Sur chaque ligne, la case à gauche, une fois cochée, fait apparaître une étoile « * ». Celle-ci signifie «Tout». Par exemple, l'écran ci-dessous crée une répétition tous les mois, tous les jours, à 7 h 30 :

L'écran ci-dessous est valable pour tous les jours, toutes les heures pleines (0 minute) :

Il est possible de ne demander que certains jours de la semaine. De nombreuses combinaisons sont possibles.

En bas de la fenêtre, la partie Commande doit contenir le script à lancer. Cette ligne doit être conforme à la syntaxe Shell. On peut donc lancer, via le Shell, un script Phyton, Perl ou Automator (voir la partie iCal de cet article).

On peut aussi lancer un script AppleScript avec la commande Shell osascript. Par exemple : « osascript /Users/moi/Documents/Mon_Script.scpt », avec Mon_script situé dans mon dossier Documents dans mon user « moi ».

Pour mettre le chemin d'accès correct, il est aussi possible de déposer le fichier script directement dans cette partie Commande. Attention cependant, car le chemin et le nom ne sont pas forcément compatibles avec la syntaxe Unix. Par exemple, le nom « Mon Script » (avec un espace entre les deux mots) va générer une erreur, car l'espace sous shell Unix a une fonction de séparation.

Dans ce cas, mettre soit des guillemets pour encadrer, soit des caractères d'échappement (\). J'ai pris l'habitude de ne jamais mettre d'espaces et autres accents dans mes noms de dossiers et de fichiers : chacun ses petites manies !

Enfin, il peut être utile de terminer la commande Unix par « > /chemin » (donc après votre chemin de script, avec un espace entre le nom du script et le >). Ceci indique au Shell Unix d'envoyer de résultat, s'il y en a un, sur ce chemin. Pour n'avoir aucun résultat, mettre «  >/dev/null ».

Voici un autre exemple en shell direct qui ouvrira l'application mail : (la commande open peut aussi ouvrir un fichier)

/usr/bin/open /Users/redac/fabien/Applications/Mail.app

Il est également possible d'utiliser osascript sans passer par un fichier script, mais en enchaînant les commandes Applescript entre guillemets simples (sous la touche 4 du clavier) avec « -e » devant chaque commande :

Voici un script en une ligne, qui ouvre une fenêtre Finder à la racine utilisateur :

osacript -e 'tell application "Finder" to make new Finder window to home'

Voici le même script décomposé en trois lignes Applescript séparées par des « -e »

osascript -e 'tell application "Finder"' -e 'make new Finder window to home' -e 'end tell'

Bien sûr, au-delà de quelques lignes d'instructions, il est préférable de passer par un fichier AppleScript.

Revenons à notre fenêtre CronniX dans laquelle il y a maintenant votre répétition et de quoi lancer votre script. Cliquez sur le bouton « Nouveau » en bas de la fenêtre pour valider votre saisie, fermer la fenêtre et revenir à la fenêtre principale de CronniX. Vous obtenez la ligne ci-dessous : (ici la tâche se répète tous les jours, à 23 h 07).

Très bien, mais ça, on pouvait déjà le faire avec iCal ! Oui, mais avec CronniX, on peut maintenant aller beaucoup plus loin dans la programmation.

Par exemple, je souhaite que mon script se déroule tous les jours, mais, entre 7 h et 23 heures, il doit se dérouler toutes les 3 minutes, alors que le reste de la nuit, toutes les 10 minutes suffisent. Comment faire ?

Nous allons modifier la ligne déjà créée. Double-clic sur la case des minutes de notre ligne déjà existante et on remplace le « 7 » par « 0-59/10 » qui signifie, toutes les minutes de 0 à 59 , seulement toutes les 10 minutes. Passons à la colonne heure pour changer le 23 en « 00-06 » pour indiquer de 0 à 6 heures.

On duplique la tâche (sélection de la ligne complète, puis menu « Dupliquer » ou Cmd D). Sur la nouvelle ligne, on corrige les minutes pour mettre « 0-59/3 » (de la minute 1 à 59, toutes les 3 minutes) et les heures à « 07-23 » (de 7 h à 23 h).

Votre CRON ressemble alors à ceci : (n'oubliez pas de l'enregistrer !)

Voici un résumé des caractères et syntaxes possibles pour chaque colonne (min, heure, J/mois, Mois, J/Sem) :

- le caractère * indique tous ou toutes (par exemple tous les jours, ou toutes les heures) ;

- le tiret - entre deux nombres indique une plage de/à par exemple jour = 10-20 dans J/Mois donnera une exécution chacun des jours, entre le 10 et le 20 de chaque mois ;

- La barre de fraction / suivie d'un nombre indique un intervalle. Par exemple 1-31/4 dans la case jour donnera tous les 4 jours pendant tout le mois (1 à 31), donc le script sera lancé le 1, le 5, 9, 13, 17, 21, 25, 29 et le 2 du mois suivant (si le premier mois a 31 jours!) ainsi de suite ;

- les jours/semaines sont numérotés de 1 à 7 (1 étant le lundi). Par exemple pour exécuter seulement le lundi, mercredi et jeudi : 1,3,4.

Les possibilités sont presque infinies en combinant les valeurs et éventuellement les lignes multiples.

Enfin, pour être complet, il est utile de vérifier que votre script et son chemin sont corrects. Pour cela, sélectionnez votre ligne et utilisez le menu CronniX « Tâche/Lancer Maintenant ».

Sachez que, par défaut, les tâches exécutées via CRON en AppleScript laissent, des messages log dans un fichier situé dans le dossier /var/mail. Ce fichier porte le nom de votre utilisateur. Il est lisible comme un fichier texte.

IV-B - Utilisation de CronniX via le Terminal

Cette partie est réservée à ceux qui veulent aller plus loin encore dans l'utilisation du CRON.

Cependant, je ne le conseille pas pour deux raisons : d'une part, au fil des versions de ses systèmes, Apple change de place les dossiers relatifs à CRON. Une forte priorité est donnée à Launchd ; d'autre part, il semble que le deamon cron soit, depuis 10.5, activé lui-même par launchd ! Alors, autant s'adresser à launchd directement.

Enfin, disons-le encore, la majorité des besoins d'un utilisateur avancé seront comblés par iCal et CronniX. Un programmeur se lancera directement dans launchd.

Il reste cependant un avantage à Cron, c'est que les habitués d'Unix, Linux et similaires retrouveront rapidement leurs petites habitudes.

Sur d'anciennes versions du système, les fichiers CRON étaient dans le dossier /etc/crontab. Ils ont depuis migré vers /private/var/at/tabs (accessible avec les autorisations administrateur).

Le répertoire /private/var/at/ contient quelques fichiers qui dépassent les fonctionnalités de CronniX. Par exemple cron.deny qui permet de lister les utilisateurs de la machine qui n'auront pas accès à l'utilitaire crontab. Inversement, le fichier cron.allow donne les utilisateurs qui y ont accès. Seul l'un de ces fichiers existe.

Sur la version 10.5 et 10.6 les tâches périodiques sont sur /private/etc/periodic qui contient trois dossiers : daily, weekly et monthly. Ces dossiers contiennent des scripts shell. Cependant, là encore, c'est désormais launchd qui prend la main sur ces tâches périodiques.

Le CRON utilisateur (celui que vous utilisez avec CronniX) est situé dans le dossier /private/var/at/tabs/. En fait il est visible, via des liens symboliques dans bien d'autres répertoires qui pointent tous sur ce même dossier.

Le fichier porte le nom de votre utilisateur. C'est lui qui contient vos tâches et leur planification. Ce fichier est en mode administrateur uniquement.

Avec le CRON réalisé avec CronniX dans le paragraphe précédent, voici le contenu de ce fichier :

sudo cat /usr/lib/cron/tabs/imac27
Password:
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (- installed on Thu Jan 24 08:20:08 2013)
# (Cron version -- $FreeBSD: src/usr.sbin/cron/crontab/crontab.c,v 1.24 2006/09/03 17:52:19 ru Exp $)
0-59/10    00-06    *    *    *    osascript /Users/imac27/Documents/Infos_Techniques/Scriptsdvlt/Isight.scpt > /dev/null
0-59/3    07-23    *    *    *    osascript /Users/imac27/Documents/Infos_Techniques/Scriptsdvlt/Isight.scpt > /dev/null

Cependant, il est important de ne pas modifier ce fichier directement. Il faut passer par l'instruction crontab (voir man crontab dans le Terminal pour plus de détails).

Dans le Terminal, crontab -l permet de visualiser votre cron utilisateur et crontab -e permet l'édition (via l'éditeur VI unix). Le but de cet article n'est pas d'expliquer l'éditeur VI, cependant voici juste comment ajouter une tâche dans la crontab.

Éditez le fichier avec : Crontab -e.

Insérez une ligne en tapant i.

Taper votre ligne, par exemple « 15 * * * * /users/moi/document/test.scpt » ajoute une exécution toutes les 15 minutes. Utilisez un espace ou une tabulation entre chaque paramètre.

Tapez Esc pour quitter le mode insertion, puis « ZZ » pour sortir et enregistrer.

Une fois encore, pourquoi se priver de l'interface graphique CronniX ?

V - Quelques éléments à propos de Launchd

Launchd est une création open source d'Apple permettant de démarrer, arrêter, et gérer des deamons, des programmes ou des scripts. Il a été introduit par Apple à partir de 2005 environ avec le système Tiger (10.4).

Il est prévu pour remplacer les process init et quelques deamons habituels des systèmes Unix tels que Crond (justement notre CRON habituel qui permet des répétitions), atd (sans entrer dans les détails, cela ressemble plus à une file d'attente de tâches), inetd et xinetd (qui gèrent respectivement les services serveurs et les connexions Internet).

Apple a rendu Launchd très puissant et polyvalent, mais sa complexité l'éloigne de la philosophie Unix qui est orientée vers des instructions simples et robustes.

Ce programme se met en route très tôt au démarrage de la machine (typiquement pendant l'écran bleu ou gris qui précède la saisie de votre « login », utilisateur/mot de passe. Autrement dit, il est bien au cœur du système.

Il comporte une partie LauchAgents (chaque session utilisateur lance ses agents, éventuellement avec une interface utilisateur) et une partie LaunchDaemon (exécutée avec des privilèges root, au niveau système et sans interface utilisateur).

La mise en œuvre nécessite un niveau programmeur et la connaissance de nombreux dossiers.

Au niveau utilisateur : ~/Library/LaunchAgents.

Au niveau des agents ajoutés par utilisateur : /Library/LaunchDaemons.

Au niveau des agents ajoutés par l'administrateur : /System/Library/LaunchDaemons.

Au niveau des deamons de l'OS : /System/Library/LaunchAgents.

La configuration des tâches se fait via des fichiers Plist qui sont chargés au moment du démarrage. Il est aussi possible de charger et décharger des Plist sans avoir à redémarrer avec les commandes respectives :

launchctl load /Library/LaunchDaemons/service.plist ;

launchctl unload /Library/LaunchDaemons/service.plist.

Typiquement un fichier .Plist contiendra le nom de la tâche (label), le chemin vers le programme de la tâche, éventuellement des arguments pour ce programme, les critères de lancement (RunAtLoad, StartInterval, StartOnMount, etc.), et des permissions (à quel niveau d'autorisation le programme doit s'exécuter).

Les paramètres tels que StartCalendarInterval ressemblent à CRON (minutes, heures, jours, jour de la semaine, mois).

Voici un exemple de fichier Plist qui permettra à Launchd de démarrer un script à l'ouverture (grâce à RunAtLoad). Ce fichier .Plist doit être enregistré dans ~/Library/LaunchAgents.

Il va lancer le script Mon_Script.scpt situé sur le bureau (remplacez username par votre user).

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
<key>Label</key>
<string>login_test</string>
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<string>/Users/username/Desktop/Mon_Script.scpt</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

Cet exemple est en fait la traduction de ce que vous faites avec l'interface graphique dans préférences système/Comptes/Ouverture au démarrage, en ajoutant « Mon_Script » à la liste des ouvertures automatiques.

Le propos de ce paragraphe est de donner un simple aperçu de Launchd et quelques points d'entrée pour vos recherches.

Pour aller plus loin, si vraiment CronniX ou iCal ne vous suffisent pas, tapez « launchd » sur Google , « man launchctl » ou « man launchd » sur votre Terminal, et lancez-vous dans la programmation. Il y a aussi de nombreux articles sur la toile à ce propos.

J'espère que ces explications vous permettront de satisfaire vos besoins simplement via iCal ou CronniX, et/ou que l'aperçu de launchd vous donnera les fondements pour vos recherches avancées.

Merci à Claude Leloup pour ses corrections.

Venez discuter de cet article sur le forum Commentez