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

3

Soy un técnico, pero bastante nuevo en macOS. Estoy usando una Mac mini que ejecuta macOS Sierra como una máquina de compilación que ejecuta 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 hacer esto.

Las cosas que funcionaron en Mac OS X 10.6 ya no funcionan, y no quiero que estas aplicaciones comiencen en iniciar sesión , porque no lo hago. No quiero permanecer conectado a la consola en esta computadora.

    
pregunta DrStrangepork 08.10.2016 - 02:03

1 respuesta

4

El servicio / lanzamiento de la aplicación durante el arranque se realiza generalmente con los demonios launchd y launch controlados por launchctl. Depende de la aplicación / ejecutable y del entorno si tal 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 zip archivo o un "OS X / macOS app "versión 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. Enlace 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

Crea un demonio de lanzamiento con sudo nano /Library/LaunchDaemon/org.goserver.start.plist y 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. Verifique 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 manera inmediata, pero no lo probé a fondo.

Luego inicia el demonio de lanzamiento con:

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

Compruebe /tmp/org.goserver.start.stderr para ver los errores de lanzamiento. Si el daemon de inicio 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. Utilice una segunda lista con un nombre diferente de lista y etiqueta, por supuesto: org.goagent.start.plist / org.goagent.start.

Probablemente tenga que agregar una condición en la lista del agente para que el agente se inicie después de que el servidor se esté ejecutando.

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

    
respondido por el klanomath 08.10.2016 - 04:43

Lea otras preguntas en las etiquetas