Intenté seguir esta guía para ejecutar una aplicación Node como servicio. Sin embargo, no se inicia con el código de salida 127. ¿Hay alguna forma de solucionar esto?
Este es el diario.
sudo journalctl --follow -u serviceName -- Logs begin at Tue 2017-08-08 16:27:10 GMT. -- Aug 08 17:06:57 raspberrypi systemd[1]: Started serviceName. Aug 08 17:06:57 raspberrypi app.js[7234]: [46B blob data] Aug 08 17:06:57 raspberrypi systemd[1]: serviceName.service: main process exited, code=exited, status=127/n/a Aug 08 17:06:57 raspberrypi systemd[1]: Unit serviceName.service entered failed state. Aug 08 17:06:57 raspberrypi systemd[1]: serviceName.service holdoff time over, scheduling restart. Aug 08 17:06:57 raspberrypi systemd[1]: Stopping serviceName... Aug 08 17:06:57 raspberrypi systemd[1]: Starting serviceName... Aug 08 17:06:57 raspberrypi systemd[1]: serviceName.service start request repeated too quickly, refusing to start. Aug 08 17:06:57 raspberrypi systemd[1]: Failed to start serviceName. Aug 08 17:06:57 raspberrypi systemd[1]: Unit serviceName.service entered failed state.
Este es serviceName.service.
[Unit] Description=ServiceName After=network.target [Service] ExecStart=/home/pi/projects/ServiceName/app.js Restart=always User=root Group=root Environment=PATH=/usr/bin:/usr/local/bin Environment=NODE_ENV=production WorkingDirectory=/home/pi/projects/ServiceName [Install] WantedBy=multi-user.target
Esto está en la parte superior de mi app.js.
#!/usr/bin/env node
Comentarios
Respuesta
ExecStart=/home/pi/projects/ServiceName/app.js
Esto le dice a systemd
que ejecute app.js
directamente. ¿Es este archivo .js
directamente ejecutable? De lo contrario, el shell arrojará un código de salida 127 – «Comando desconocido».
Comentarios
- De acuerdo con la guía que vinculé en la pregunta, el shebang en la parte superior de
app.js
debería hacerlo ejecutable, porque especifica Node como el intérprete. - Creo que @DopeGhoti se refería al permiso ejecutable, como en, " lectura-escritura-ejecutable " permisos establecidos por archivo.
- " De lo contrario, el shell arrojará un código de salida 127 " – cualquiera que sea la razón exacta del 127, systemd no usa el shell para iniciar los servicios.
Responder
127 es un comando no encontrado.
Asegúrese de que el usuario root tenga acceso a Nodo binario; de lo contrario, cambie las siguientes líneas con el usuario para el que ha instalado nodo
User=root Group=root
De lo contrario, intente seguir
[Unit] Description="ServiceName" After=network.target [Service] ExecStart=path_to_node/node /home/pi/projects/ServiceName/app.js Restart=always # Restart service after 10 seconds if node service crashes RestartSec=10 # Output to syslog StandardOutput=syslog StandardError=syslog #Change this to find app logs in /var/log/syslog SyslogIdentifier=nodejs-api # Followig will require if you are using the PORT or Node from Envirnoment Environment=NODE_ENV=production PORT=3000 [Install] WantedBy=multi-user.target
Una vez que su servidor mac hine is up & no puede acceder al servidor, solucione el problema verificando los registros de / var / log / syslog con el siguiente comando
sudo grep "nodejs-api" /var/log/syslog
Iniciar al arrancar: sudo systemctl enable rocketch
Respuesta
Para depurar, simplemente ejecute esto (sustituyendo las partes < > con el valor de su archivo de unidad systemd:
sudo runuser -l <User> -g <Group> -c "cd <WorkingDirectory> && <PATH> <ExecStart>"
El problema es el User
no puede acceder al ExecStart
dentro del PATH
que ha configurado.
Si alguien todavía está atascado, he escrito una guía paso a paso para: depuración de systemd
Respuesta
Hola, para cualquiera que esté interesado, tuve este problema y probé todo bajo el sol, pero al final actualicé desde N oda 6 al nodo 12 solucionó el problema.
/home/pi/projects/ServiceName/app.js
desde el shell?forever-service
.type node
ydf /home/pi/projects/ServiceName/app.js
?node is /home/pi/.nvm/versions/node/v7.8.0/bin/node
2.Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 6166268 4446224 1383764 77% /