No se puede ejecutar el script Node.js con launchd en Mac

1

Estoy tratando de ejecutar un script de nodo cada hora en mi Mac (OSX 10.8.2 Mountain Lion). Según los resultados de búsqueda de alto rango, la mejor manera de hacerlo es agregar un launchdagente de lanzamiento.

Por alguna razón, no parece funcionar.

Escribí el siguiente archivo de agente de lanzamiento y lo guardé como ~/Library/LaunchAgents/agenttest.plist.

<?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>KeepAlive</key>
        <dict>
            <key>SuccessfulExit</key>
            <false/>
        </dict>
        <key>Label</key>
        <string>protocol</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/node</string>
            <string>/Users/snorpey/PATH/TO/file.js</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartInterval</key>
        <integer>3600</integer>
    </dict>
</plist>

Comencé el agente de lanzamiento ejecutándome launchctl load ~/Library/LaunchAgents/agenttest.plisten la terminal.

También hice el archivo de script ejecutable con sudo chmod -x /Users/snorpey/PATH/TO/file.jsy actualicé los permisos del archivo con sudo chmod 777 /Users/snorpey/PATH/TO/file.js.

Cuando ejecuto /usr/local/bin/node /Users/snorpey/PATH/TO/file.jsen la terminal, el script funciona bien.

Sin embargo, no parece funcionar cuando está dirigido por launchd. Recibo los siguientes mensajes en /var/log/system.log:

Jan 15 22:32:46 snorpey com.apple.launchd.peruser.501[595] (agenttest[21625]): Exited with code: 1
Jan 15 22:32:46 snorpey com.apple.launchd.peruser.501[595] (agenttest): Throttling respawn: Will start in 10 seconds

¿Por qué no puede ejecutar el script?

snorpey
fuente

Respuestas:

1

Resulta que tengo que ejecutar este trabajo como root por cualquier razón.

Moví el archivo a /Library/LaunchAgents/agenttest.plist.

También actualicé la propiedad del archivo con sudo chown root /Library/LaunchAgents/agenttest.plist.

Y los permisos de archivo con sudo chmod 644 /Library/LaunchAgents/agenttest.plist.

Para ejecutar el trabajo como root: sudo launchctl load /Library/LaunchAgents/agenttest.plist

snorpey
fuente
1
Si no hubiera necesitado ejecutarse como root, tal vez el error se solucionó simplemente volviendo a cargar el plist. Normalmente tiene que descargar y cargar listas para aplicar los cambios.
Lri
Todavía veo un error 127 cuando ejecuto launchd list :(
Chet
1

Estuve tropezando con esto por un tiempo (obteniendo 127 errores). Resulta que necesitas algo como esto en tu lista:

<key>EnvironmentVariables</key>
<dict>
  <key>PATH</key>
  <string>/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>

launchd parece ejecutar cosas con una ruta mínima que no incluye / usr / local / bin, y el nodo parece necesitar esto en su RUTA para funcionar correctamente.

Brian Duff
fuente