Nodejs 應用程式使用永遠啟動 systemd 服務

Nodejs 應用程式使用永遠啟動 systemd 服務

我們有一個名為的 NodeJs 應用程序應用程式.j在 Linux RHEL 機器上運作。我們使用節點啟動服務永遠應用程式所在目錄中命令列上的模組。


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

這工作得很好,但現在我們想要應用程式.js系統重新啟動後啟動,因此我們創建了一個系統服務文件似乎不起作用。
我希望有人能指出一些我沒有看到的明顯問題。

/etc/systemd/system/fulltext.service文件


[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進程後退出。

由於您沒有指定 service Type=,那麼預設值是「simple」(因為您有ExecStart=),它期望主進程繼續運行。因此,當主「永遠」進程丟失時,systemd 認為它已經失敗,因為它不知道子進程已經生成。

嘗試Type=forking在 下方新增[Service]

作為systemd.service 文檔狀態:

如果設定為 forking,則預期使用 ExecStart= 配置的程序將呼叫 fork() 作為其啟動的一部分。父進程預計退出啟動完成並且所有通訊通道均已建立時。孩子繼續跑作為主服務進程,服務管理員會認為父進程退出時啟動的單元。

相關內容