Jag försökte följa denna guide för att köra en nodapplikation som en tjänst. Det går dock inte att starta, med utgångskod 127. Finns det något sätt att åtgärda detta?
Det här är 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.
Detta är 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
Detta är högst upp i min app.js.
#!/usr/bin/env node
Kommentarer
Svar
ExecStart=/home/pi/projects/ServiceName/app.js
Detta säger att systemd
ska köra app.js
direkt. Är den här .js
filen direkt körbar? Om inte, kommer skalet att kasta en utgångskod 127 – ”Okänt kommando”.
Kommentarer
- Enligt guiden som jag länkade i frågan, shebangen längst upp i
app.js
ska göra den körbar, eftersom den anger nod som tolk. - Jag tror att @DopeGhoti hänvisade till den körbara behörigheten – som i, " läs-skriv-körbar " behörigheter inställda per fil.
- " Om inte, kommer skalet att kasta en utgångskod 127 " – oavsett den exakta anledningen till 127 använder systemd inte skalet för att starta tjänster.
Svar
127 är inte ett kommando.
Se till att rotanvändaren har tillgång till nod binärt annat ändra följande rader med användaren som du har installerat nod för
User=root Group=root
Annars försök att följa
[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 är uppe & du kan inte komma åt servern, du felsöker genom att kontrollera loggar från / var / log / syslog med följande kommando
sudo grep "nodejs-api" /var/log/syslog
Starta vid start: sudo systemctl aktiverar rocketch
Svar
För att felsöka kör du bara detta (ersätter < > delar med värdet från din systemd-enhetsfil:
sudo runuser -l <User> -g <Group> -c "cd <WorkingDirectory> && <PATH> <ExecStart>"
Problemet är givet User
kan inte komma åt ExecStart
inom PATH
du har ställt in.
Om någon fortfarande är fast har jag skrivit en steg-för-steg-guide till: felsökningssystemd
Svar
Hej för alla som är intresserade, jag hade det här problemet och försökte allt under solen, men till slut uppgraderade jag från N ode 6 till nod 12 fixade problemet.
/home/pi/projects/ServiceName/app.js
från skalet?forever-service
.type node
ochdf /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% /