20 votes

Quelqu'un peut-il recommander un bon tutoriel pour écrire (à partir de zéro) une tâche launchd de type cron ?

J'ai un travail assez simple que j'aimerais exécuter toutes les heures. Je pourrais le faire en utilisant cron mais j'ai pensé que je pourrais utiliser ça pour en apprendre plus sur launchd puisque j'en ai entendu de bonnes choses. J'ai le man launchd.plist comme référence, mais je cherche quelque chose qui soit davantage axé sur la création d'un exemple de travail.

0 votes

Cela devrait être déplacé vers Stackoverflow.

5 votes

@Philip Regan J'y ai pensé, mais il n'y a pas vraiment de programmation impliquée, pour moi. Si j'avais demandé à un cron Superuser.com ne serait-il pas le bon endroit ? Depuis launchd est la version d'Apple de cron (et aussi daemontools et peut-être d'autres choses), j'ai pensé que c'était ma meilleure option.

0 votes

Vous pourriez également le mettre dans un automate script et l'exécuter à partir d'iCal - s'il s'exécute comme vous le souhaitez.

14voto

Nick Berardi Points 31361

launchd exécute des démons ( /Library/LaunchDaemons o /System/Library/LaunchDaemons ) en tant que Root, et les exécutera indépendamment du fait que les utilisateurs soient connectés ou non. Lancer des agents ( /Library/LaunchAgents/ o ~/Library/LaunchAgents/ ) sont exécutés lorsqu'un utilisateur est connecté en tant que tel. Vous ne pouvez pas utiliser setuid pour changer l'utilisateur qui exécute le script sur les démons. Le site /System est réservé aux tâches de Mac OS X. Je vous recommande donc de mettre votre répertoire launchd dans l'une ou l'autre des catégories suivantes /Library ou le ~/Library dossier comme il se doit.

La première étape consiste donc à déterminer si l'on crée un agent ou un démon.

La deuxième étape consiste à faire votre .plist fichier. Vous pouvez utiliser des programmes basés sur une interface graphique tels que Lingon pour vous aider dans cette tâche ou utilisez simplement votre éditeur de texte préféré :

Un échantillon .plist pour exécuter un script toutes les heures ( StartInterval o StartIntervalCalendar sont les clés que nous voulons - StartInterval pour qu'un élément se produise chaque x secondes, StartIntervalCalendar pour une heure et/ou une date spécifique. Voir 126907 sur SuperUser pour un exemple que j'ai fait avec StartCalendarInterval) :

<?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>local.IDENTIFIER_HERE.SOMETHING</string>
    <key>OnDemand</key>
    <true/>
    <key>RunAtLoad</key>
    <false/>
    <key>UserName</key>
    <string>USERNAME HERE</string>
    <key>Program</key>
    <string>/PATH/TO/SCRIPT</string>
    <key>ProgramArguments</key>
    <array>
        <string>Argument_1</string>
        <string>Argument_2</string>
    </array>
    <key>StartInterval</key>
    <integer>3600</integer>
</dict>
</plist>

Modifiez le .plist pour pointer vers votre script et tout argument nécessaire (les arguments sont sur des lignes séparées) et sauvegarder le fichier avec le même nom que la valeur Label mais avec .plist à la fin. (par exemple, local.my-mac.flickrstats serait enregistré comme local.my-mac.flickrstats.plist ). Si vous ne l'avez pas encore fait, déplacez ce .plist pour /Library/LaunchDaemons lors de la création d'un Daemon (fonctionne tout le temps) ou pour ~/Library/LaunchAgents (seulement si vous êtes connecté) ou /Library/LaunchAgents (tout utilisateur est connecté).

Pour lancer le travail que vous voulez exécuter launchctl si nécessaire pour charger le fichier. Pour les éléments dans /Library vous devez utiliser sudo : par exemple, sudo launchctl load -w /PATH/TO/PLIST

Pour référence, consultez également les questions suivantes sur Super User : Lancement de la commanded en tant que Root , Chargement d'un démon à l'échelle du système et Comment faire en sorte qu'un script s'exécute tous les jours.

4voto

Greg Hurlman Points 10944

Je sais que ce n'est pas un bon mais vous pourriez jeter un coup d'œil au Guide de programmation des démons et services d'Apple, qui comporte une section sur la programmation des emplois temporaires.

Je sais que ce n'est pas un tutoriel complet, mais, avec lui, vous pouvez comprendre les bases de launchd .

Il fournit également un exemple de crond tâche :

<?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>com.apple.periodic-daily</string>
    <key>ProgramArguments</key>
    <array> 
        <string>/usr/sbin/periodic</string>
        <string>daily</string>
    </array>
    <key>LowPriorityIO</key>
    <true/>
    <key>Nice</key>
    <integer>1</integer>
    <key>StartCalendarInterval</key>
    <dict>  
        <key>Hour</key>
        <integer>3</integer>
        <key>Minute</key>
        <integer>15</integer>
    </dict>
</dict>
</plist>

0 votes

J'ai rétrogradé parce que vous avez admis que la ressource n'est pas ce que j'ai demandé et cela m'a paru un peu RTFM, mais j'y ai repensé et j'aimerais annuler mon rétrogradation. Malheureusement, je ne peux pas le faire tant que la question n'est pas éditée (elle a été trop longue), et je n'ai pas encore assez de représentants pour l'éditer. Pourriez-vous modifier quelque chose ? Merci.

0 votes

@Hank Gay : Merci pour votre commentaire. J'ai également modifié ma réponse.

4voto

alemayo Points 572

Cela m'a beaucoup aidé : http://launchd.info

Il couvre la configuration, l'administration et le dépannage à l'aide de Terminal ou de l'interface graphique launchd. LaunchControl . Des exemples sont également fournis.

2voto

Luke Girvin Points 8270

Je sais que vous cherchiez un tutoriel, mais au cas où quelqu'un viendrait ici à la recherche d'un outil pour l'aider à créer/éditer des entrées launchd, j'ai déjà utilisé ceci auparavant : Lingon (sourceforge)

Il n'est plus développé activement, mais ce qu'il contient fonctionne (et inclut évidemment les sources, etc.). Je l'ai utilisé sur Snow Leopard pour programmer des sauvegardes vers le nuage Amazon, etc.

0 votes

Lingon est maintenant dans l'App Store donc est toujours actif juste pas gratuit voir <. peterborgapps.com/lingon >

0 votes

La version appstore a été paralysée par les exigences de la politique d'Apple. La version précompilée de SourceForge fonctionne bien - bien que la boîte de dialogue modale lors de l'enregistrement, me demandant de me déconnecter ou de redémarrer pour activer le démon, ne se soit pas fermée. J'ai dû quitter le programme à partir de son menu (pas en forçant la sortie) et vérifier qu'il avait enregistré le fichier correctement. Le déclencheur de fichiers et de répertoires n'est pas supporté, et il n'est pas possible de créer quelque chose qui fonctionne comme Root avec la version AppStore.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X