Ich habe versucht, diesem Handbuch zu folgen, um eine Knotenanwendung als Dienst auszuführen. Es kann jedoch nicht mit dem Exit-Code 127 gestartet werden. Gibt es eine Möglichkeit, dies zu beheben?

Dies ist das 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. 

Dies ist der 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 

Dies befindet sich oben in meiner app.js.

#!/usr/bin/env node 

Kommentare

  • Was passiert, wenn Sie /home/pi/projects/ServiceName/app.js über die Shell ausführen?

Es läuft einwandfrei. Es läuft auch gut mit forever-service.

  • Was ist die Ausgabe von type node und 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% /
  • Antwort

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

    Dies weist systemd an, app.js direkt auszuführen. Ist diese .js -Datei direkt ausführbar? Wenn nicht, gibt die Shell einen Exit-Code 127 – „Unbekannter Befehl“ aus.

    Kommentare

    • Gemäß der Anleitung, die ich in der Frage verlinkt habe, Der Shebang oben in app.js sollte es ausführbar machen, da er Node als Interpreter angibt.
    • Ich glaube, @DopeGhoti bezog sich auf die ausführbare Berechtigung – as in, " Lese- / Schreib-ausführbare Datei " pro Datei festgelegte Berechtigungen.
    • " Wenn nicht, gibt die Shell einen Exit-Code 127 aus. " – Unabhängig vom genauen Grund für die 127 verwendet systemd die Shell nicht zum Starten von Diensten.

    Antwort

    127 ist ein Befehl, der nicht gefunden wurde.

    Stellen Sie sicher, dass der Root-Benutzer Zugriff auf hat Knoten binär sonst ändern Sie die folgenden Zeilen mit dem Benutzer, für den Sie den Knoten

    User=root Group=root 

    Andernfalls versuchen,

    [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 

    Sobald Ihr Server Mac hine is up & Sie können nicht auf den Server zugreifen. Sie beheben Fehler, indem Sie die Protokolle von / var / log / syslog mit dem folgenden Befehl überprüfen.

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

    Start beim Booten: sudo systemctl enable rocketch

    Antwort

    Zum Debuggen führen Sie dies einfach aus (Ersetzen der Teile < > mit dem Wert aus Ihrer systemd-Einheitendatei:

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

    Das Problem ist gegeben User kann nicht auf die ExecStart innerhalb der von Ihnen festgelegten PATH zugreifen.

    Wenn noch jemand feststeckt, habe ich eine Schritt-für-Schritt-Anleitung geschrieben für: Debugging-Systemd

    Antwort

    Hey, für alle Interessierten, ich hatte dieses Problem und habe alles unter der Sonne ausprobiert, aber am Ende ein Upgrade von N. Ode 6 bis Knoten 12 haben das Problem behoben.

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.