¿Cómo ejecuto una aplicación en el arranque/inicio en Sierra?

Soy un aficionado a la tecnología pero bastante nuevo en macOS. Estoy usando una Mac mini con macOS Sierra como máquina de compilación con GoCD . Quiero que el servidor (go-server) y el agente (go-agent) se inicien en el arranque, pero no puedo encontrar una explicación fácil en ninguna parte sobre cómo hacerlo.

Las cosas que funcionaban en Mac OS X 10.6 ya no funcionan, y no quiero que estas aplicaciones se inicien al iniciar sesión , porque no quiero permanecer conectado a la consola en esta computadora.

¿Has mirado los servicios de lanzamiento/daemons?
@dante12 Lea la pregunta: DrS explícitamente no quiere iniciar la aplicación o el servicio al iniciar sesión, sino al momento del arranque.

Respuestas (1)

El inicio del servicio/aplicación durante el arranque generalmente se realiza con los demonios launchd y launch controlados por launchctl. Depende de la aplicación/ejecutable y del entorno si dicho demonio de lanzamiento es posible o no. Muchas aplicaciones GUI requieren una sesión de inicio de sesión y el método no funciona.

Después de inspeccionar GoCD, puede descargar un archivo zip o una versión de "aplicación OS X/macOS" del servidor. El servidor se inicia con un script de shell en ambos casos: ya sea explícitamente en la versión zip o implícitamente con "Go Server.app/Contents/MacOS/go-server".

Vaya con el archivo zip, descomprímalo y mueva la carpeta resultante a /usr/local. Vincule la carpeta /usr/local/go-server-16.10.0 a /usr/local/:

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

Cree un demonio de lanzamiento con sudo nano /Library/LaunchDaemon/org.goserver.start.plisty el contenido

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

Cambie el propietario y los permisos del archivo si es necesario:

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

Modifique /usr/local/go-server-16.10.0/server.sh según sus necesidades. Debe configurar un directorio de registro diferente en la línea 85 o se creará un archivo de registro en el directorio raíz. Compruebe otras variables y rutas (como $JAVA_HOME, YOURKIT_PATH, $PID_FILE, etc.) en el script de shell y modifíquelas según sus necesidades/entorno. Aquí funcionó de inmediato, pero no lo probé a fondo.

Luego inicie el demonio de lanzamiento con:

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

Compruebe /tmp/org.goserver.start.stderr para errores de lanzamiento. Si el demonio de lanzamiento funciona bien, puede eliminar la parte:

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

de la lista.

El método debería funcionar de acuerdo con el GoAgent. El inicio del agente se realiza con agent.sh. Por supuesto, use una segunda plist con una plist y un nombre de etiqueta diferentes: org.goagent.start.plist/org.goagent.start.

Probablemente deba agregar una condición en el plist del agente para que el agente se inicie después de que se ejecute el servidor.


Intenté lo mismo con la aplicación "OS X", pero no pude eliminar todos los errores.