tl; dr: processo nativo launcher e responsabile uso di OSX, launchd
.
Per fare ciò, crea un launchctl
demone. Avrai il pieno controllo di tutti gli aspetti dello script. Puoi correre una volta o tenerlo in vita come demone. Nella maggior parte dei casi, questa è la strada da percorrere.
- Crea un
.plist
file in base alle istruzioni nei documenti Apple Dev qui o più in dettaglio di seguito.
- Posizionare in
~/Library/LaunchAgents
- Accedi (o esegui manualmente tramite
launchctl load [filename.plist]
)
Per di più launchd
, l'articolo di Wikipedia è abbastanza buono e descrive il sistema e i suoi vantaggi rispetto ad altri sistemi più vecchi.
Ecco il file plist specifico per eseguire uno script all'accesso .
Aggiornato il 25/09/2017 per OSX El Capitan e versioni successive (credito a José Messias Jr ):
<?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.user.loginscript</string>
<key>ProgramArguments</key>
<array><string>/path/to/executable/script.sh</string></array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Sostituisci il <string>
tasto Program dopo con il comando desiderato (nota che qualsiasi script a cui fa riferimento quel comando deve essere eseguibile: chmod a+x /path/to/executable/script.sh
per essere sicuro che sia per tutti gli utenti).
Salva come ~/Library/LaunchAgents/com.user.loginscript.plist
Esegui launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
e disconnetti / accedi per testare (o per testare direttamente, esegui launchctl start com.user.loginscript
)
Coda /var/log/system.log
per i messaggi di errore.
La chiave è che si tratta di una voce launchd specifica dell'utente, quindi verrà eseguita all'accesso per l'utente specificato. I daemon di avvio specifici del sistema (inseriti /Library/LaunchDaemons
) vengono eseguiti all'avvio.
Se vuoi che uno script venga eseguito all'accesso per tutti gli utenti, credo che LoginHook sia la tua unica opzione, e questo è probabilmente il motivo per cui esiste.