1 votos

Launch Daemon para NodeJS App no se inicia al reiniciar

He creado el siguiente demonio de lanzamiento para ejecutar un programa nodejs en el inicio ( tiddlywiki en este caso):

<?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>Debug</key>
        <true/>
        <key>StandardOutPath</key>
        <string>/tmp/tiddlywiki.stdout</string>
        <key>StandardErrorPath</key>
        <string>/tmp/tiddlywiki.stderr</string>
        <key>Label</key>
        <string>com.activescott.tiddlywiki</string>
        <key>OnDemand</key>
        <false/>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>inetdCompatibility</key>
        <dict>
            <key>Wait</key>
            <true/>
        </dict>
        <key>EnvironmentVariables</key>
        <dict>
            <key>PATH</key>
            <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:</string>
        </dict>
        <key>ProgramArguments</key>
        <array>
            <string>/Volumes/minidata/Dropbox/tiddlywiki/node_modules/.bin/tiddlywiki</string>
            <string>/Volumes/minidata/Dropbox/tiddlywiki/wiki</string>
            <string>--listen</string>
            <string>credentials=creds.csv</string>
            <string>writers=scott</string>
            <string>readers=scott</string>
            <string>port=443</string>
            <string>host=0.0.0.0</string>
            <string>tls-key=key.pem</string>
            <string>tls-cert=server.crt</string>
        </array>
    </dict>
</plist>

El archivo se llama com.activescott.tiddlywiki.plist y está en el /Library/LaunchDaemons/ carpeta.

Si lo cargo con el comando

sudo launchctl load -Fw /Library/LaunchDaemons/com.activescott.tiddlywiki.plist

Lo arranco con el comando de abajo y arranca y funciona bien - sólo que no se reinicia automáticamente cuando el ordenador se reinicia:

sudo launchctl start com.activescott.tiddlywiki

Tenga en cuenta que tarda unos ~20s en arrancar completamente (por ejemplo, responder en un puerto y escribir en stdout).

Estoy en Mac OS X, 10.13.6 con BuildVersion 17G13035

Actualización :

Después de un reinicio me di cuenta de que la salida de sudo launchctl list com.activescott.tiddlywiki muestra LastExitStatus como 19968 . Este valor mostrará 0 si lo inicio con launchctl. A continuación se muestra la salida completa:

{
        "StandardOutPath" = "/tmp/tiddlywiki.stdout";
        "LimitLoadToSessionType" = "System";
        "StandardErrorPath" = "/tmp/tiddlywiki.stderr";
        "Label" = "com.activescott.tiddlywiki";
        "TimeOut" = 30;
        "OnDemand" = true;
        "LastExitStatus" = 19968;
        "Program" = "/Volumes/minidata/Dropbox/tiddlywiki/node_modules/.bin/tiddlywiki";
        "ProgramArguments" = (
                "/Volumes/minidata/Dropbox/tiddlywiki/node_modules/.bin/tiddlywiki";
                "/Volumes/minidata/Dropbox/tiddlywiki/wiki";
                "--listen";
                "credentials=creds.csv";
                "writers=scott";
                "readers=scott";
                "port=443";
                "host=0.0.0.0";
                "tls-key=key.pem";
                "tls-cert=server.crt";
        );
};

1voto

Nour Puntos 8

Suponiendo que su aplicación pueda ser ejecutada dentro de la Terminal, hacer un programa AppleScript (usando Script Editor ) que contiene los comandos que ejecutarías en la terminal y luego exportar ese programa como un Run-Only Application colocándolo en su /Applications/ puede crear su lanzador de programas.

Hay una respuesta útil sobre el uso de do shell script en AppleScript aquí.

Ejemplo de AppleScript: Ejecutar hdiutil para montar un paquete de sparseimage como unidad de copia de seguridad de Time Machine

do shell script "hdiutil attach /Volumes/NewVolumeD/TimeMachine.sparsebundle"

Entonces, navegando a Preferencias del Sistema > Usuarios y Grupos > (su cuenta) > Elementos de inicio de sesión desbloqueando el menú de configuración y utilizando la tecla + en la parte inferior izquierda para seleccionar su aplicación de lanzamiento desde Applications . Ese lanzador se ejecutará ahora al iniciar la sesión, marca de verificación en Hide para que no lance mensajes no deseados.

Como alternativa, puede hacer un zsh o bash script y decirle a AppleScript que ejecute el shell script (dada su ruta absoluta) en lugar de especificar cada comando en el propio AppleScript.

EDIT: En lugar de utilizar elementos de inicio de sesión, puede colocar el paquete de aplicaciones en /Library/StartupItems (aunque está obsoleto) si quieres que se lance al inicio en lugar de al inicio de sesión.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X