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.js
Prozess 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=forking
Versuchen 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.