Wie starte ich eine App beim Booten/Starten in Sierra?

Ich bin ein Technikfreak, aber relativ neu bei macOS. Ich verwende einen Mac mini, auf dem macOS Sierra ausgeführt wird, als Build-Maschine, auf der GoCD ausgeführt wird . Ich möchte, dass der Server (go-server) und der Agent (go-agent) beim Booten gestartet werden, aber ich kann nirgendwo eine einfache Erklärung dafür finden, wie das geht.

Dinge, die unter Mac OS X 10.6 funktionierten, funktionieren nicht mehr, und ich möchte nicht , dass diese Apps bei der Anmeldung gestartet werden , da ich auf diesem Computer nicht bei der Konsole angemeldet bleiben möchte.

Hast du dir Launch Services/Daemons angeschaut?
@dante12 Bitte lesen Sie die Frage: DrS möchte die App/den Dienst ausdrücklich nicht beim Anmelden, sondern beim Booten starten.

Antworten (1)

Der Start von Diensten/Apps während des Bootens erfolgt normalerweise mit launchd und Launch-Daemons, die von launchctl gesteuert werden. Es hängt von der App/ausführbaren Datei und der Umgebung ab, ob ein solcher Start-Daemon möglich ist oder nicht. Viele GUI-Apps erfordern eine Anmeldesitzung und die Methode funktioniert nicht.

Nachdem Sie GoCD überprüft haben, können Sie entweder eine ZIP-Datei oder eine „OS X/macOS App“-Version des Servers herunterladen. Der Server wird in beiden Fällen mit einem Shell-Skript gestartet: entweder explizit in der Zip-Version oder implizit mit „Go Server.app/Contents/MacOS/go-server“.

Gehen Sie mit der Zip-Datei, entpacken Sie sie und verschieben Sie den resultierenden Ordner nach /usr/local. Verknüpfen Sie den Ordner /usr/local/go-server-16.10.0 mit /usr/local/:

ln -s /usr/local/go-server-16.10.0 /usr/local/go-server

Erstellen Sie einen Startdämon mit sudo nano /Library/LaunchDaemon/org.goserver.start.plistund dem Inhalt

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.goserver.start</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>/usr/local/go-server/server.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/org.goserver.start.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/org.goserver.start.stdout</string>
</dict>
</plist>

Ändern Sie bei Bedarf den Eigentümer und die Berechtigungen der Datei:

sudo chown root:wheel /Library/LaunchDaemons/org.goserver.start.plist
sudo chmod 644 /Library/LaunchDaemons/org.goserver.start.plist

Passen Sie /usr/local/go-server-16.10.0/server.sh an Ihre Bedürfnisse an. Sie sollten in Zeile 85 ein anderes Log-Verzeichnis einstellen oder es wird eine Log-Datei im Root-Verzeichnis erstellt. Überprüfen Sie andere Variablen und Pfade (wie $JAVA_HOME, YOURKIT_PATH, $PID_FILE usw.) im Shell-Skript und ändern Sie sie entsprechend Ihren Anforderungen/Ihrer Umgebung. Hier hat es out-of-the-box funktioniert - aber ich habe es nicht gründlich getestet.

Starten Sie dann den Launch-Daemon mit:

sudo launchctl load /Library/LaunchDaemons/org.goserver.start.plist

Überprüfen Sie /tmp/org.goserver.start.stderr auf launchd-Fehler. Wenn der Launch-Daemon gut läuft, können Sie den Teil entfernen:

    <key>StandardErrorPath</key>
    <string>/tmp/org.goserver.start.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/org.goserver.start.stdout</string>

aus der Liste.

Die Methode sollte entsprechend mit dem GoAgent funktionieren. Der Start des Agenten erfolgt mit agent.sh. Verwenden Sie natürlich eine zweite Plist mit einer anderen Plist und einem anderen Labelnamen: org.goagent.start.plist/org.goagent.start.

Sie müssen wahrscheinlich eine Bedingung in der Plist des Agenten hinzufügen, damit der Agent gestartet wird, nachdem der Server ausgeführt wird.


Ich habe das gleiche mit der "OS X"-App versucht, aber es ist mir nicht gelungen, alle Fehler zu beseitigen.