tl; dr: Verwenden Sie den nativen Prozessstarter und -manager von OSX launchd
.
Erstellen Sie dazu einen launchctl
Daemon. Sie haben die volle Kontrolle über alle Aspekte des Skripts. Sie können einmal ausführen oder als Daemon am Leben bleiben. 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 genauer unten.
- Platzieren in
~/Library/LaunchAgents
- Anmelden (oder manuell ausführen über
launchctl load [filename.plist]
)
Für mehr auf launchd
, der Wikipedia - Artikel ist recht gut und beschreibt das System und seine Vorteile gegenüber anderen älteren Systemen.
Hier ist die spezifische plist-Datei, mit der beim Anmelden ein Skript ausgeführt werden kann .
Aktualisiert am 25.09.2017 für OSX El Capitan und neuer (Gutschrift an 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>
Ersetzen Sie die <string>
Taste nach dem Programm durch den gewünschten Befehl (beachten Sie, dass jedes Skript, auf das dieser Befehl verweist, ausführbar sein muss, chmod a+x /path/to/executable/script.sh
um sicherzustellen, dass es für alle Benutzer gilt).
Speichern als ~/Library/LaunchAgents/com.user.loginscript.plist
Lauf launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
und abmelden / anmelden, um zu testen (oder direkt testen, ausführen launchctl start com.user.loginscript
)
Schwanz /var/log/system.log
für Fehlermeldungen.
Der Schlüssel ist, dass dies ein benutzerspezifischer Starteintrag ist, der bei der Anmeldung für den angegebenen Benutzer ausgeführt wird. Systemspezifische Startdämonen (platziert in/Library/LaunchDaemons
) werden beim Booten ausgeführt.
Wenn Sie möchten, dass ein Skript bei der Anmeldung für alle Benutzer ausgeführt wird, ist LoginHook meiner Meinung nach Ihre einzige Option, und das ist wahrscheinlich der Grund, warum es existiert.