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.