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.
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 ? Depuislaunchd
est la version d'Apple decron
(et aussidaemontools
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.
0 votes
Ironie du sort, trois ans plus tard, je devais moi-même mettre en œuvre un processus cron/launchd et je me suis retrouvé à examiner cette question sous un angle complètement différent. Stack Overflow a une opinion mitigée sur ce qu'il faut faire avec les questions sur launchd, mais ils n'aiment vraiment pas ces questions. J'ai juste pensé que toute la situation était amusante. +1