Jeg forsøgte at følge denne vejledning for at køre en Node-applikation som en tjeneste. Det starter dog ikke med exit-kode 127. Er der nogen måde at rette op på?

Dette er journalen.

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. 

Dette er 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 

Dette er øverst i min app.js.

#!/usr/bin/env node 

Kommentarer

  • Hvad sker der, når du kører /home/pi/projects/ServiceName/app.js fra skallen?
  • Det kører helt fint. Det kører også fint ved hjælp af forever-service.
  • Hvad er output fra type node og 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% /

Svar

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

Dette fortæller systemd at køre app.js direkte. Er denne .js fil direkte eksekverbar? Hvis ikke, kaster shell en udgangskode 127 – “Ukendt kommando”.

Kommentarer

  • Ifølge guiden, jeg linkede i spørgsmålet, shebang øverst i app.js skal gøre det eksekverbart, fordi det angiver Node som tolk.
  • Jeg tror @DopeGhoti henviste til den eksekverbare tilladelse – som i, " læs-skriv-eksekverbar " tilladelser angivet pr. fil.
  • " Hvis ikke, kaster shell en exit-kode 127 " – uanset den nøjagtige årsag til 127, bruger systemd ikke shell til at starte tjenester.

Svar

127 er en kommando, der ikke findes.

Sørg for, at rodbrugeren har adgang til node binær ellers skift følgende linjer med den bruger, som du har installeret node til

User=root Group=root 

Ellers prøv at følge

[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 

Når din server mac hine er op & du kan ikke få adgang til serveren, du foretager fejlfinding ved at kontrollere logfiler fra / var / log / syslog ved hjælp af følgende kommando

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

Start ved opstart: sudo systemctl aktiverer rocketch

Svar

For at debugere skal du bare køre dette (erstatte < > dele med værdien fra din systemd-enhedsfil:

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

Problemet er givet User har ikke adgang til ExecStart inden for PATH du har angivet.

Hvis nogen stadig sidder fast, har jeg skrevet en trinvis vejledning til: debugging systemd

Svar

Hej for alle interesserede, jeg havde dette problem og prøvede alt under solen, men til sidst opgraderede jeg fra N ode 6 til node 12 løste problemet.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *