Tl;dr: Verwenden Sie den nativen Prozessstarter und -manager von OSX, launchd
.
Dazu erstellen Sie einen launchctl
-Daemon. Sie haben volle Kontrolle über alle Aspekte des Skripts. Sie können es einmal ausführen oder als Daemon am Leben halten. In den meisten Fällen ist dies der richtige Weg.
- Erstellen Sie eine
.plist
Datei gemäß den Anweisungen in den Apple Dev-Dokumenten hier oder weiter unten für mehr Details.
- Platzieren Sie es in
~/Library/LaunchAgents
- Melden Sie sich an (oder führen Sie es manuell über
launchctl load [filename.plist]
aus)
Für weitere Informationen über launchd
ist der Wikipedia-Artikel recht gut und beschreibt das System und seine Vorteile gegenüber anderen älteren Systemen.
Hier ist die spezifische plist-Datei, um ein Skript beim Anmelden auszuführen.
Aktualisiert 25.09.2017 für OSX El Capitan und neuer (Dank an José Messias Jr):
Label
com.user.loginscript
ProgramArguments
/path/to/executable/script.sh
RunAtLoad
Ersetzen Sie das nach dem Program-Schlüssel durch Ihren gewünschten Befehl (beachten Sie, dass jedes durch diesen Befehl referenzierte Skript ausführbar sein muss: chmod a+x /path/to/executable/script.sh
, um sicherzustellen, dass es für alle Benutzer ist).
Speichern Sie es als ~/Library/LaunchAgents/com.user.loginscript.plist
Führen Sie launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
aus und melden Sie sich ab/ wieder an, um zu testen (oder um direkt zu testen, führen Sie launchctl start com.user.loginscript
) aus
Überwachen Sie /var/log/system.log
auf Fehlermeldungen.
Der Schlüssel ist, dass dies ein benutzerspezifischer launchd-Eintrag ist, der also beim Anmelden für den entsprechenden Benutzer ausgeführt wird. Systemspezifische launch-Daemons (platziert in /Library/LaunchDaemons
) werden beim Start ausgeführt.
Wenn Sie möchten, dass ein Skript beim Anmelden für alle Benutzer ausgeführt wird, glaube ich, dass LoginHook Ihre einzige Option ist, und das ist wahrscheinlich der Grund, warum es existiert.