Ho tentato di seguire questa guida per eseguire unapplicazione Node come servizio. Tuttavia, non si avvia, con il codice di uscita 127. Cè un modo per risolvere questo problema?

Questo è il journal.

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. 

Questo è 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 

Questo è allinizio del mio app.js.

#!/usr/bin/env node 

Commenti

  • Cosa succede quando esegui /home/pi/projects/ServiceName/app.js dalla shell?
  • Funziona perfettamente bene. Funziona bene anche utilizzando forever-service.
  • Qual è loutput di type node e df /home/pi/projects/ServiceName/app.js?
  • 1. 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% /

Risposta

ExecStart=/home/pi/projects/ServiceName/app.js 

Questo sta dicendo a systemd di eseguire app.js direttamente. Questo file .js è direttamente eseguibile? In caso contrario, la shell lancerà un codice di uscita 127 – “Unknown command”.

Commenti

  • Secondo la guida che ho collegato nella domanda, lo shebang nella parte superiore di app.js dovrebbe renderlo eseguibile, perché specifica Node come interprete.
  • Credo che @DopeGhoti si riferisse allautorizzazione eseguibile, come in, " read-write-executable " autorizzazioni impostate per file.
  • " In caso contrario, la shell lancerà un codice di uscita 127 " – qualunque sia il motivo esatto del 127, systemd non usa la shell per avviare i servizi.

Risposta

127 è un comando non trovato.

Assicurati che lutente root abbia accesso a node binary else cambia le seguenti righe con lutente per cui hai installato node

User=root Group=root 

Altrimenti prova a seguire

[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 volta che il tuo server mac hine is up & non sei in grado di accedere al server, risolvi i problemi controllando i log da / var / log / syslog con il seguente comando

sudo grep "nodejs-api" /var/log/syslog 

Avvia allavvio: sudo systemctl enable rocketch

Risposta

Per eseguire il debug basta eseguire questo (sostituendo le parti < > con il valore del file di unità di systemd:

 sudo runuser -l <User> -g <Group> -c "cd <WorkingDirectory> && <PATH> <ExecStart>"  

Il problema è dato User non può accedere a ExecStart allinterno di PATH che hai impostato.

Se qualcuno è ancora bloccato, ho scritto una guida passo passo per: debugging systemd

Risposta

Ciao a chiunque fosse interessato, ho avuto questo problema e ho provato di tutto sotto il sole, ma alla fine laggiornamento da N ode 6 to Node 12 ha risolto il problema.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *