Pokusil jsem se podle této příručky spustit aplikaci Node jako službu. Nelze jej však spustit s kódem ukončení 127. Existuje nějaký způsob, jak to opravit?

Toto je deník.

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. 

Toto je 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 

Toto je v horní části mého app.js.

#!/usr/bin/env node 

Komentáře

  • Co se stane, když spustíte /home/pi/projects/ServiceName/app.js z prostředí?
  • Funguje to naprosto dobře. Funguje také dobře pomocí forever-service.
  • Jaký je výstup type node a 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% /

odpověď

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

Tím říkáte systemd přímému spuštění app.js. Je tento .js soubor přímo spustitelný? Pokud ne, shell vrhne výstupní kód 127 – „Neznámý příkaz“.

Komentáře

  • Podle průvodce, který jsem v otázce propojil, shebang v horní části app.js by jej měl udělat spustitelným, protože specifikuje Node jako tlumočníka.
  • Domnívám se, že @DopeGhoti měl na mysli oprávnění ke spustitelnosti – jako v " read-write-executable " nastavených oprávnění na soubor.
  • " Pokud ne, shell vrhne výstupní kód 127 " – bez ohledu na přesný důvod 127, systemd nepoužívá shell ke spouštění služeb.

Odpověď

127 je příkaz nenalezen.

Ujistěte se, že uživatel root má přístup k uzel binární else změnit následující řádky s uživatelem, pro kterého jste nainstalovali uzel

User=root Group=root 

Jinak Zkuste následující

[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 

Jakmile je váš server mac hine is up & nemáte přístup k serveru, odstraňování problémů provedete kontrolou protokolů z / var / log / syslog pomocí následujícího příkazu

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

Spustit při spuštění: sudo systemctl povolit rocketch

Odpovědět

Chcete-li ladit, stačí spustit toto (nahrazením částí < > s hodnotou ze souboru systémové jednotky:

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

Problém je daný User nemá přístup k ExecStart v rámci PATH, které jste nastavili.

Pokud je někdo stále zaseknutý, napsal jsem podrobného průvodce: debugging systemd

Odpovědět

Ahoj všem zájemcům, měl jsem tento problém a zkusil jsem vše pod sluncem, ale nakonec jsem upgradoval z N óda 6 na uzel 12 problém vyřešila.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *