代替forever下一個部署node的持久化工具---pm2

2023-08-31 15:00:29

最近有個後端專案,用的是node,在持久化的時候會掛掉,詳細瞭解到用的是nohup,然後先詳細瞭解了一下nohup

nohup是一個Linux命令,用於在系統後臺不結束通話地執行命令,退出終端不會影響程式的執行1nohup的英文全稱是no hang up(不掛起)。

nohup為什麼不穩定,可能有以下幾個原因:
1.nohup命令只能保證程式在後臺執行,但不能保證程式不會因為其他原因而終止,比如記憶體不足、程式異常、系統重啟等。
2.nohup命令在預設情況下(非重定向時),會輸出一個名叫nohup.out的檔案到當前目錄下,如果當前目錄的nohup.out檔案不可寫,輸出重定向到$HOME/nohup.out檔案中
3如果這些檔案被刪除或者磁碟空間不足,可能會導致程式無法正常輸出或者崩潰。
4.nohup命令在執行時,會將當前shell的標準輸入、標準輸出和標準錯誤輸出全部重定向到/dev/null裝置中,避免被關閉終端的訊號所中斷,但是,如果程式需要從標準輸入讀取資料或者向標準輸出和標準錯誤輸出寫入資料,那麼nohup命令可能會造成程式阻塞或者異常。

解決思路:

這個時候我想到了forever,因為之前碰到類似的問題,也寫文章寫了如何安裝,但是在安裝完之後碰到過一個問題,就是這個問題,但是當我安裝完執行的時候報錯如下

報錯資訊

(node:9352) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency

找到了相關的解決方案是說這個錯誤是因為 Node.js 中存在迴圈模組依賴,導致在解析模組過程中存取了未定義的屬性,node在高於node14以後就不支援迴圈依賴,所以會報錯,如果切換node版本低於14或者12就不會有這個問題,但是,因為專案的版本是node16,所以切換版本是不可能的, 所以解決方案要麼就是解決掉迴圈依賴的問題,要麼就是換其他的持久化工具,綜合條件下我選擇了第二種,切換持久話工具,那就是pm2

PM2介紹

PM2 是一個守護行程管理工具,幫助您管理和守護您的應用程式。它以簡單直觀的 C​​LI 命令列方式進行工作。當然,pm2還有一個非常好用的功能就是開機自啟動程式

1.安裝pm2

上傳檔案到/home/tool/pm2 目錄下,這個可以自己決定到那個目錄,但是下面的路徑需要和安裝的路徑保持一致,當然簡單安裝就是

npm install pm2 -g

但是問題就是重啟之後pm2的環境變數就不見了,當然也有可能是個例,所以我選擇了下面的安裝方式

安裝包地址

連結: https://pan.baidu.com/s/1XbeL48bGgR2oM14Uc9VCKw

提取碼: xxxq

解壓

tar -xvf pm2-5.2.2.tar

建立軟連線

ln -s /home/tool/pm2/pm2-5.2.2/bin/pm2 /usr/local/bin/pm2

2.執行pm2檢視輸出

安裝完成後,在任何地方輸入pm2會列印下面的資訊

pm2

3.在程式的根目錄下執行

cd  /home/20230809

啟動程式

pm2 start ./src/app.js --silent       //--silent表示不需要紀錄檔,但是還是可以看到紀錄檔,奇怪

然後執行 ,看到status為 online表示當前為線上

 pm2 ls

前臺存取

常用維護命令:

停止所有的程式:

pm2 stop all

重新啟動所有應用:

pm2 restart all

檢視紀錄檔:

pm2 logs

開機啟動

啟動:

$ pm2 startup

儲存:

$ pm2 save

更多的功能請存取官網瞭解

pm2中文官網