GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Systemd-Dienst startet Nodejs nicht?

Ich versuche, meine nodejs-App beim Booten zu starten. Es läuft gut, wenn ich es von der Kommandozeile aus als Benutzer odroid starte.

Hier ist meine Servicedatei:

[Unit]
Description=ProImage
After=network.target mysql.service

[Service]
ExecStart=/bin/node //eadn-wc01-5196795.nxedge.io/proimage/app.js
Restart=on-failure
RootDirectory=/proimage
WorkingDirectory=/proimage
User=root

[Install]
WantedBy=multi-user.target

Wenn ich laufe:

sudo systemctl status proimage_daemon

Ich bekomme:

[email protected]:~$ sudo systemctl status proimage_daemon
● proimage_daemon.service - ProImage
   Loaded: loaded (/lib/systemd/system/proimage_daemon.service; enabled; vendor preset: enabled)
   Active: inactive (dead) (Result: exit-code) since Tue 2019-02-26 09:45:30 EST; 6s ago
  Process: 30797 ExecStart=/bin/node //eadn-wc01-5196795.nxedge.io/proimage/app.js (code=exited, status=200/CHDIR)
 Main PID: 30797 (code=exited, status=200/CHDIR)

Feb 26 09:45:29 odroid systemd[1]: proimage_daemon.service: Unit entered failed state.
Feb 26 09:45:29 odroid systemd[1]: proimage_daemon.service: Failed with result 'exit-code'.
Feb 26 09:45:30 odroid systemd[1]: proimage_daemon.service: Service hold-off time over, scheduling restart.
Feb 26 09:45:30 odroid systemd[1]: Stopped ProImage.
Feb 26 09:45:30 odroid systemd[1]: proimage_daemon.service: Start request repeated too quickly.
Feb 26 09:45:30 odroid systemd[1]: Failed to start ProImage.

Ich habe mir journalctl angesehen mit:

journalctl -u proimage_daemon.service

und es gibt mir gleich folgendes:

[email protected]:~$ journalctl -u proimage_daemon.service --since 09:38
-- Logs begin at Tue 2019-02-26 09:02:47 EST, end at Tue 2019-02-26 10:02:34 EST. --
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Trying to enqueue job proimage_daemon.service/stop/replace
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Installed new job proimage_daemon.service/stop as 13040
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Enqueued job proimage_daemon.service/stop as 13040
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Job proimage_daemon.service/stop finished, result=done
Feb 26 09:38:12 odroid systemd[1]: Stopped ProImage ICU.
Feb 26 09:39:19 odroid systemd[1]: Started ProImage ICU.
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Main process exited, code=exited, status=200/CHDIR
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Unit entered failed state.
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Failed with result 'exit-code'.
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Service hold-off time over, scheduling restart.
Feb 26 09:39:19 odroid systemd[1]: Stopped ProImage ICU.

Ich habe mir ein Dutzend Beiträge zu diesem Problem angesehen. Alle sagen, dass status=200/CHDIR auf ein Problem mit dem Arbeitsverzeichnis hinweist.

In meinem Fall existiert das Arbeitsverzeichnis definitiv und gehört root. Ich habe die Berechtigungen für dieses Verzeichnis rekursiv auf 777 gesetzt. Ich habe viele verschiedene Dinge mit der Servicedatei ausprobiert, alles ohne Erfolg.

Hat jemand einen Vorschlag, was mein Problem sein könnte?

Akzeptierte Antwort:

Gemäß der systemd exec-Dokumentation, Einstellung RootDirectory ist einer Chroot ähnlich. In Kombination mit der Einstellung WorkingDirectory bedeutet dies, dass systemd Ihre App nach /proimage chrootet und versuchen Sie es dann innerhalb dieses Verzeichnisses nach cd /proimage , was zu /proimage/proimage übersetzt würde .

Wenn Sie den Prozess nicht chrooten müssen, entfernen Sie das RootDirectory Richtlinie. Wenn Sie beabsichtigen, den Prozess zu chrooten, entfernen Sie das WorkingDirectory Richtlinie.

Siehe auch:Ssh – SSH-Zugriffsversuche protokollieren?
Linux
  1. Starten Sie den OpenCA-Dienst automatisch über Systemd in CentOS 7

  2. Centos – Systemd killt Dienst sofort nach Start?

  3. Steam startet nicht auf Ubuntu 16.04?

  4. Wie stoppen Sie den systemd-Dienst

  5. Systemd-Socket-Aktivierung vs. xinetd

Verwalten Sie den Start mit systemd

Dienste auf systemd RHEL 7 Linux-Server starten, stoppen und neu starten

So starten, stoppen oder starten Sie Apache neu

Systemctl-Befehle zum Verwalten des Systemd-Dienstes

Verwalten von cgroups mit systemd

Systemd-postgresql-Startskript