launchd
esegue Daemon ( /Library/LaunchDaemons
o /System/Library/LaunchDaemons
) come root, e li eseguirà indipendentemente dal fatto che gli utenti abbiano effettuato l'accesso o meno. Gli agenti di lancio ( /Library/LaunchAgents/
o ~/Library/LaunchAgents/
) vengono eseguiti quando un utente ha effettuato l'accesso come tale utente. Non è possibile utilizzare setuid per modificare l'utente che esegue lo script sui daemon. La directory /System
è riservata alle attività di Mac OS X quindi ti consiglio di inserire i tuoi launchd
plists nella cartella /Library
o ~/Library
come è logico.
Quindi il primo passo è determinare se stai creando un agente o un demone.
Il secondo passo è quello di rendere il tuo file .plist
. Puoi utilizzare programmi basati sulla GUI come Lingon per aiutarti o semplicemente utilizzare il tuo editor di testo preferito:
Un campione .plist
per l'esecuzione di uno script ogni ora ( StartInterval
o StartIntervalCalendar
sono le chiavi che vogliamo - StartInterval
per un elemento che si verifica ogni x
secondi, StartIntervalCalendar
per un tempo specifico e / o Data. Vedere 126907 su SuperUser per un esempio creato con 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>
Modifica .plist
come necessario per puntare allo script e agli eventuali argomenti necessari (gli argomenti sono su righe separate) e salva il file con lo stesso nome del valore Etichetta ma con .plist
alla fine. (ad esempio, local.my-mac.flickrstats
verrebbe salvato come local.my-mac.flickrstats.plist
). Se non lo hai già fatto, sposta quel file .plist
su /Library/LaunchDaemons
quando crei un Daemon (viene eseguito sempre) o su ~/Library/LaunchAgents
(solo tu hai effettuato l'accesso) o /Library/LaunchAgents
(qualsiasi utente ha effettuato l'accesso ).
Per avviare il lavoro che si desidera eseguire launchctl
come necessario per caricare il file. Per gli articoli in /Library
, dovresti usare sudo: ad esempio, sudo launchctl load -w /PATH/TO/PLIST
Per riferimento consulta anche le seguenti domande su Super User: Comando Launchd come root , Carica un demone di sistema e Come posso far funzionare uno script ogni giorno