Ik heb geprobeerd deze handleiding te volgen om een Node-applicatie als een service uit te voeren. Het start echter niet met exitcode 127. Is er een manier om dit op te lossen?
Dit is het dagboek.
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.
Dit is de 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
Dit staat bovenaan mijn app.js.
#!/usr/bin/env node
Reacties
Antwoord
ExecStart=/home/pi/projects/ServiceName/app.js
Dit vertelt systemd
om app.js
rechtstreeks uit te voeren. Is dit .js
bestand direct uitvoerbaar? Als dit niet het geval is, zal de shell een exitcode 127 genereren – “Onbekend commando”.
Opmerkingen
- Volgens de gids die ik in de vraag heb gelinkt, de shebang bovenaan
app.js
zou het uitvoerbaar moeten maken, omdat het Node specificeert als de interpreter. - Ik geloof dat @DopeGhoti verwees naar de uitvoerbare toestemming – zoals in, " lees-schrijf-uitvoerbaar " rechten ingesteld per bestand.
- " Zo niet, dan zal de shell een exitcode 127 geven " – wat de exacte reden voor de 127 ook is, systemd gebruikt de shell niet om services te starten.
Answer
127 is een commando niet gevonden.
Zorg ervoor dat de rootgebruiker toegang heeft tot node binary anders wijzig de volgende regels met de gebruiker waarvoor je node hebt geïnstalleerd
User=root Group=root
Anders Probeer het te volgen
[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
Zodra uw server mac hine is up & je hebt geen toegang tot de server, je lost het probleem op door de logs van / var / log / syslog te controleren met het volgende commando
sudo grep "nodejs-api" /var/log/syslog
Start bij het opstarten: sudo systemctl enable rocketch
Antwoord
Voer dit uit om te debuggen (vervang de < > delen met de waarde uit uw systemd unit-bestand:
sudo runuser -l <User> -g <Group> -c "cd <WorkingDirectory> && <PATH> <ExecStart>"
Het probleem is het gegeven User
heeft geen toegang tot de ExecStart
binnen de PATH
die je hebt ingesteld.
Als iemand nog steeds vastzit, heb ik een stapsgewijze handleiding geschreven voor: debugging systemd
Antwoord
Hallo voor iedereen die geïnteresseerd is, ik had dit probleem en probeerde alles onder de zon, maar uiteindelijk upgraden van N ode 6 tot Node 12 loste het probleem op.
/home/pi/projects/ServiceName/app.js
vanuit de shell uitvoert?forever-service
.type node
endf /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% /