node.js-Anwendung startet den Systemd-Dienst und verwendet ihn für immer

node.js-Anwendung startet den Systemd-Dienst und verwendet ihn für immer

Wir haben eine NodeJs-Anwendung namensapp.jläuft auf einer Linux RHEL-Maschine. Wir starten den Dienst mit dem Knotenfür immerModul in der Befehlszeile im Verzeichnis, in dem sich die Anwendung befindet.


> cd /usr/app/dir
> forever start app.js

Das funktioniert gut, aber jetzt hätten wir gerneapp.jsStart nach dem Systemneustart, also haben wir einesystemdServicedatei, die anscheinend nicht funktioniert.
Ich hatte gehofft, jemand könnte mich auf einige offensichtliche Probleme hinweisen, die ich nicht sehe.

/etc/systemd/system/fulltext.serviceDatei


[Unit]
Description=FullText Server NodeJS Script app.js
After=network.target

[Service]
Environment="NODE_ENV=lint"
Environment="PATH=/usr/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/slsuser/.local/bin:/home/slsuser/bin"
WorkingDirectory=/usr/share/eBSE/current/
ExecStart=/usr/bin/forever start  /usr/app/dir/app.js
ExecStop=/usr/bin/forever  stop   /usr/app/dir/app.js
User=root
Group=root

[Install]
WantedBy=multi-user.target

Beim Ausführen wird der folgende Fehler angezeigtSystem Volltext starten


fulltext.service - FullText Server NodeJS Script app.js
   Loaded: loaded (/etc/systemd/system/fulltext.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

Oct 30 17:07:21 edc-v-slsftx01i04 forever[23421]:     uid  command       script                         forever pid   id logfile                 uptime
Oct 30 17:07:21 edc-v-slsftx01i04 forever[23421]: [0] gMOv /usr/bin/node /usr/app/dir/app.js 23415   23427    /root/.forever/gMOv.log 0:0:0:0.59
Oct 30 17:08:00 edc-v-slsftx01i04 systemd[1]: Started FullText Server NodeJS Script app.js.
Oct 30 17:08:00 edc-v-slsftx01i04 systemd[1]: Starting FullText Server NodeJS Script app.js...
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23514]: warn:    --minUptime not set. Defaulting to: 1000ms
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23514]: warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23514]: info:    Forever processing file: /usr/app/dir/app.js
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23530]: info:    Forever stopped process:
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23530]:     uid  command       script                         forever pid   id logfile                 uptime
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23530]: [0] dX9T /usr/bin/node /usr/app/dir/app.js 23524   23536    /root/.forever/dX9T.log 0:0:0:0.53

Antwort1

Mir ist klar, dass dies eine alte Frage ist und der OP die Antwort wahrscheinlich nicht mehr braucht. Aber nur für den Fall, dass jemand anderes wie ich darüber stolpert ...


Der Forever-Prozess wird beendet, nachdem er den eigentlichen node app.jsProzess gestartet hat.

Da Sie keinen Dienst angeben Type=, ist die Standardeinstellung „simple“ (da Sie haben ExecStart=), was bedeutet, dass der Hauptprozess weiter ausgeführt wird. Wenn also der Hauptprozess „für immer“ abstürzt, denkt systemd, dass er fehlgeschlagen ist, da es nicht weiß, dass ein Kindprozess entstanden ist.

Type=forkingVersuchen Sie, unter hinzuzufügen [Service].

Als diesystemd.service-DokumentationZustände:

Wenn auf Forking eingestellt ist, wird erwartet, dass der mit ExecStart= konfigurierte Prozess im Rahmen seines Starts fork() aufruft.Der übergeordnete Prozess wird voraussichtlich beendetwenn der Start abgeschlossen ist und alle Kommunikationskanäle eingerichtet sind.Das Kind rennt weiterals Hauptdienstprozess, und der Dienstmanager betrachtet die Einheit als gestartet, wenn der übergeordnete Prozess beendet wird.

verwandte Informationen