簡體   English   中英

如何讓一個node.js的應用永久運行?

[英]How to make a node.js application run permanently?

在 Debian 服務器上,我安裝了 Node.js。我了解如何使用此命令行從 putty 啟動應用程序:

node /srv/www/MyUserAccount/server/server.js

並通過地址50.51.52.53:8080和端口)訪問它。

但是一旦我關閉膩子,我就無法再到達地址50.51.52.53:8080

如何讓一個Node.js的應用永久運行?

你可以猜到,我是 Linux 和 Node.js 的初學者。

你可以像這樣使用 npm永久安裝:

sudo npm install -g forever

然后使用以下命令啟動您的應用程序:

forever server.js

或作為服務:

forever start server.js

Forever 在您的應用程序因某種原因崩潰或停止時重新啟動。 要將重新啟動限制為 5,您可以使用:

forever -m5 server.js

列出所有正在運行的進程:

forever list

請注意括號中的整數,並按如下方式使用它來停止進程:

forever stop 0

重新啟動正在運行的進程:

forever restart 0

如果您正在處理應用程序文件,則可以使用-w參數在server.js文件更改時自動重新啟動:

forever -w server.js

盡管其他答案解決了 OP 的問題,但它們都有些矯枉過正,並沒有解釋他或她遇到此問題的原因。

關鍵是這一行,“我關閉putty,然后我無法到達地址”

當您在 Putty 上登錄到遠程主機時,您已經啟動了一個 SSH linux 進程,並且從該 SSH 會話鍵入的所有命令都將作為該進程的子進程執行。

您的問題是,當您關閉 Putty 時,您正在退出 SSH 會話,這會殺死該進程和任何活動的子進程。 當您關閉 putty 時,您無意中殺死了您的服務器,因為您在前台運行它。 為了避免這種行為,通過將 & 附加到您的命令在后台運行服務器:

node /srv/www/MyUserAccount/server/server.js &

這里的問題是缺乏 linux 知識,而不是關於 node.js 的問題。 有關更多信息,請查看: http : //linuxconfig.org/understanding-foreground-and-background-linux-processes

更新:

正如其他人提到的,節點服務器在退出終端時仍然可能死亡。 我遇到的一個常見問題是,即使節點進程在 bg 中運行,它的 stdout 和 stderr 仍然指向終端。 這意味着如果節點服務器寫入console.log 或console.error,它將收到管道損壞錯誤並崩潰。 這可以通過管道輸出過程來避免:

node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &

如果問題仍然存在,那么您應該研究諸如tmuxnohup之類的東西,它們仍然比特定於節點的解決方案更強大,因為它們可用於運行所有類型的進程(數據庫、日志服務、其他語言)。

一個可能導致服務器退出的常見錯誤是,在運行nohup node your_path/server.js &您只需單擊一下即可關閉 Putty 終端。 您應該改用exit命令,然后您的節點服務器將啟動並運行。

您可以使用PM2 ,它是具有內置負載均衡器的 Node.js 應用程序的生產流程管理器。

安裝 PM2

$ npm install pm2 -g

啟動應用程序

$ pm2 start app.js

如果您使用快遞,那么您可以像這樣啟動您的應用程序

pm2 start ./bin/www --name="app"

列出所有正在運行的進程:

$ pm2 list

它將列出所有進程。 然后,您可以通過以下命令使用應用程序的 ID 或名稱來停止/重新啟動您的服務。

$ pm2 stop all                  
$ pm2 stop 0                    
$ pm2 restart all               

顯示日志

$ pm2 logs ['all'|app_name|app_id]

我建議尋找諸如Forever 之類的東西,以便在發生崩潰時重新啟動 Node,並為您處理守護進程。

如果您只想始終在終端中運行您的節點應用程序,只需使用 screen.

在 ubuntu/debian 上安裝:

sudo apt-get install screen

用法:

$ screen
$ node /path/to/app.js

ctrl + a然后ctrl + d關閉

返回:

一屏: screen -r

如果有多個屏幕,您可以使用以下命令列出所有屏幕: screen -ls

然后: screen -r pid_number

你可以簡單地使用這個

nohup node /srv/www/MyUserAccount/server/server.js &

這將保持應用程序運行並關閉它,您將不得不殺死它。

為此,您可以安裝htop ,然后搜索節點,然后將其殺死

Forever是一個非常好的 NodeJs 模塊,可以做到這一點。

通過在命令行中鍵入來forever安裝

$ npm install forever -g

然后使用以下命令運行 node.js 腳本

$ forever start /path/to/script.js

你已准備好出發。 另外你可以運行

$ forever list

查看所有正在運行的腳本。 您可以通過鍵入終止任何特定腳本

$ forever stop [pid]

其中[pid]是您將從list命令獲取的腳本的進程 ID。 要停止所有腳本,您可以鍵入

$ forever stopall

在開發過程中,我建議使用nodemon 每當文件更改時,它都會重新啟動您的服務器。 正如其他人指出的那樣, Forever是一種選擇,但在生產中,這完全取決於您使用的平台。 您通常希望使用操作系統推薦的方式來保持服務正常運行(例如http://www.freedesktop.org/wiki/Software/systemd/ )。

安裝

$ [sudo] npm install forever -g

您可以使用永遠來連續運行腳本

forever start server.js

forever list

停止服務

forever stop server.js

nohup工作我檢查了AWS Ubunto vm 遵循正確的syntax

ubuntu@ip-172-00-00-00:~/ms$ nohup node server.js &

然后按回車你會看到這一行

ubuntu@ip-172-00-00-00:~/ms$ nohup: ignoring input and appending output to ‘nohup.out’

然后輸入這個

rm nohup.out

在此處輸入圖片說明

這是我一直用於個人項目的新貴解決方案:

將它放在/etc/init/node_app_daemon.conf

description "Node.js Daemon"
author      "Adam Eberlin"

stop on shutdown

respawn
respawn limit 3 15

script
  export APP_HOME="/srv/www/MyUserAccount/server"
  cd $APP_HOME
  exec sudo -u user /usr/bin/node server.js
end script

這也將在應用程序崩潰時處理重新生成應用程序。 如果應用程序在 15 秒內崩潰 3 次或更多次,它將放棄重新生成應用程序的嘗試。

我發現永遠把工作做得很好。

假設你已經安裝了 npm,如果沒有,就這樣做

sudo apt-get install npm

然后永久安裝

npm install forever --global

現在你可以像這樣運行它

forever start app.js

https://codingweb.io/run-nodejs-application-background/

首先全局安裝pm2

npm install -g pm2

然后開始

pm2 start bin/www 

另一種方法是為您的應用程序創建一個系統單元。 在“/etc/systemd/system”文件夾中創建一個“XXX.service”文件,類似於:

[Unit]
Description=swagger
After=network.target

[Service]
ExecStart=/usr/bin/http-server /home/swagger/swagger-editor &
WorkingDirectory=/home/swagger
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

一個好處是該應用程序將作為服務運行,如果崩潰,它會自動重新啟動。

您也可以使用 sytemctl 來管理它:

systemctl start XXX啟動服務, systemctl stop XXX停止服務, systemctl stop XXX systemctl enable XXX在系統啟動時自動啟動應用程序。

我希望這能幫到您。

在命令行中,永久安裝:

npm install forever -g

創建一個示例文件:

sudo nano server.js 

您可以直接在瀏覽器中編輯文件並獲得結果。
您可以使用 filezilla 或任何編輯器來編輯該文件。 運行此命令以運行文件:

forever start --minUptime 1 --spinSleepTime 1000 -w server.js

在此處輸入圖片說明

無需安裝任何其他軟件包。

運行這個命令

node server.js > stdout.txt 2> stderr.txt &

server.js是您的服務器文件,也可以是api.js

之后點擊“退出”關閉終端

exit

嘗試pm2使您的應用程序永遠運行。

npm install -g pm2

然后使用

pm2 start server.js

要列出和停止應用程序,請使用 commnds

pm2 list

pm2 stop 0

眾所周知,有很多選擇可以做到這一點。 這是一個純粹的 Shell 解決方案,不需要額外的程序/包。

如果由於某種原因/錯誤而崩潰,此解決方案將重新啟動server.js

假設這是一個run.sh

#!/usr/bin/env sh

while :; do
    node server.js

    echo "Restarting..."
    sleep 1
done

確保使run.sh文件可執行:

chmod +x run.sh

並運行它:

./run.sh

如果你想在后台運行它:

./run.sh &

在后台超級安靜地運行(分離,沒有任何輸出):

( ./run.sh > /dev/null 2>&1 & )

我推薦使用 PM2,它是 Node.js 應用程序的進程管理器。 PM2 提供了一種簡單的方法來管理和守護應用程序(將它們作為服務運行)。

請參閱此鏈接 - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7

永遠包對我有用,只有一件事,它取決於deep-equal ,所以如果您在安裝它時遇到問題,例如:

npm -g install forever

嘗試:

npm -g install forever deep-equal@1.1.1

反而。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM