nodejs アプリケーションが forever を使用して systemd サービスを開始する

nodejs アプリケーションが forever を使用して systemd サービスを開始する

NodeJsアプリケーションがありますアプリ.jLinux RHELマシン上で実行されています。ノードを使用してサービスを開始します永遠にアプリケーションが存在するディレクトリのコマンド ラインでモジュールを実行します。


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

これはうまく機能しますが、今度はアプリシステムの再起動後に起動できるようにするために、システム動作しないと思われるサービス ファイル。
私が気付いていない明白な問題を誰かが指摘してくれることを期待しています。

フルテキストサービスファイル


[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

実行時に次のエラーが発生しますシステム全文開始


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

答え1

これは古い質問であり、おそらく OP はもう回答を必要としていないことは承知しています。しかし、万が一、私と同じようにこれに遭遇した人が他にもいる場合に備えて...


永久プロセスは、実際のnode app.jsプロセスを起動した後に終了します。

サービス を指定していないためType=、デフォルトは「simple」( があるためExecStart=)となり、メインプロセスが引き続き実行されることが想定されます。そのため、メインの「forever」プロセスがドロップすると、systemd は子プロセスが生成されたことを認識していないため、プロセスが失敗したと認識します。

Type=forkingの下に追加してみてください[Service]

としてsystemd.service ドキュメント状態:

forking に設定されている場合、ExecStart= で構成されたプロセスは起動の一部として fork() を呼び出すことが予想されます。親プロセスは終了することが期待される起動が完了し、すべての通信チャネルが設定されたとき。子供は走り続けるメイン サービス プロセスとして実行され、サービス マネージャーは親プロセスが終了したときにユニットが開始されたと見なします。

関連情報