Come posso avviare un'app all'avvio / avvio su Sierra?

3

Sono un tecnico ma abbastanza nuovo per macOS. Sto usando un Mac mini che esegue macOS Sierra come una macchina di compilazione che esegue GoCD . Voglio che il server (go-server) e l'agente (go-agent) inizino all'avvio, ma non riesco a trovare una spiegazione facile da nessuna parte per come farlo.

Le cose che funzionano su Mac OS X 10.6 non funzionano più, e io non voglio che queste app inizino su login , perché non lo faccio t voglio rimanere connesso alla console su questo computer.

    
posta DrStrangepork 08.10.2016 - 02:03
fonte

1 risposta

4

Avvio servizio / app mentre l'avvio avviene di solito con launchd e lancia i daemon controllati da launchctl. Dipende dall'app / eseguibile e dall'ambiente se tale daemon di avvio è possibile o meno. Molte app GUI richiedono una sessione di accesso e il metodo non funziona.

Dopo aver ispezionato il GoCD puoi scaricare un zip file o "OS X / macOS app "versione del server. Il server viene avviato con uno script di shell in entrambi i casi: esplicitamente nella versione zip o implicitamente con "Go Server.app/Contents/MacOS/go-server".

Vai con il file zip, decomprimilo e sposta la cartella risultante in / usr / local. Collega la cartella /usr/local/go-server-16.10.0 a / usr / local /:

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

Crea un demone di lancio con sudo nano /Library/LaunchDaemon/org.goserver.start.plist e il contenuto

<?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>

Modifica proprietario e autorizzazioni del file, se necessario:

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

Modifica /usr/local/go-server-16.10.0/server.sh in base alle tue esigenze. È necessario impostare una directory di registro diversa nella riga 85 o un file di registro verrà creato nella directory principale. Controlla altre variabili e percorsi (come $ JAVA_HOME, YOURKIT_PATH, $ PID_FILE ecc.) Nello script della shell e modificali in base alle tue esigenze / ambiente. Qui ha funzionato fuori dagli schemi, ma non l'ho testato a fondo.

Quindi avvia il daemon di avvio con:

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

Controlla /tmp/org.goserver.start.stderr per gli errori di launchd. Se il daemon di avvio funziona correttamente, è possibile rimuovere la parte:

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

dal plist.

Il metodo dovrebbe funzionare di conseguenza con il GoAgent. L'inizio dell'agente è fatto con agent.sh. Utilizza un secondo plist con un nome plist e nome etichetta diversi: org.goagent.start.plist / org.goagent.start.

Probabilmente devi aggiungere una condizione nel plist dell'agente in modo che l'agente venga avviato dopo l'esecuzione del server.

Ho provato lo stesso con l'app "OS X" ma non sono riuscito a eliminare tutti gli errori.

    
risposta data 08.10.2016 - 04:43
fonte

Leggi altre domande sui tag