<samp id="sp0v5"></samp><samp id="sp0v5"><output id="sp0v5"></output></samp><span id="sp0v5"><output id="sp0v5"><nav id="sp0v5"></nav></output></span><optgroup id="sp0v5"></optgroup>

    <legend id="sp0v5"><i id="sp0v5"></i></legend>

    <cite id="sp0v5"><li id="sp0v5"></li></cite>
    1. 展開
      湖北國聯計算機科技有限公司
    2. 首頁HOME
    3. 公司簡介INTRODUCTION
    4. 安全防御DEFENSE
    5. 軟件開發SOFTWARE
    6. 物聯網IOT
    7. 運行維護SRE
    8. 成功案例CASE
    9. 聯系我們CONTACT
    10. Software Technology Sharing |技術分享

      nodejs部署方式-pm2
      來源:湖北國菱計算機科技有限公司-荊州網站建設-荊州軟件開發-政府網站建設公司 時間:2020-06-15

      目前Nodejs開發中有很多痛點,其中有一個是修改完代碼以后需要我們重啟服務才能看到效果。這樣一次次的殺進程、重啟,殺進程、重啟很讓人頭大。程序員是最痛恨重復工作的物種,之前有了解過的同學可能知道forever。forever可以幫我們解決上面的問題,通過對資源變化的檢測做到變化后自動重啟。開發階段我們使用 node file.js 來啟動另外由于Nodejs的單線程,任何異常都會導致整個服務中斷,這對于生產上長時間提供服務的程序來講是不可以的, forever 可以幫我們在異常后重啟,保證服務一直在線,我想這也就是它名字的由來吧。但我想說的是 forever 不夠“高!大!上!”。接下來我要介紹一個足夠高大上的神器– pm2 。

      簡介

      pm2 = P (rocess) M (anager)2,是可以用于生產環境的Nodejs的進程管理工具,并且它內置一個負載均衡。它不僅可以保證服務不會中斷一直在線,并且提供0秒reload功能,還有其他一系列進程管理、監控功能。并且使用起來非常簡單。下面我將把我的使用過程分享出來,Nodejs應用是一個基于Express 4.x的應用,名稱是 Wolverine 。

      安裝

      環境清單:

      • windows7 x64

      • node v5.0.0

      • npm 3.3.6

      全局安裝 pm2

      $ npm install pm2 -g

      更新

      $ pm2 update

      啟動

      直接啟動的命令: pm2 start *** --watch (修改名稱 --name='')

      以前啟動 Wolverine 是利用package.json的 scripts 來實現的,只需要執行 npm run start 就可以啟動,配置如下:

      'scripts': {

         'start': 'node ./bin/www',

         'debug': 'node debug ./bin/www'

       },

      使用 pm2 我們可以在start處配置成 pm2 ./bin/www ,命令后面支持加參數來實現watch、cluster多進程模式等功能。我不太喜歡一大串的命令,于是我使用了配置文件的方式。

      Wolverine 的根目錄,我創建了一個 processes.json 配置文件,配置文件內容如下,注釋寫的也很清楚了

      {

       'apps' : [{

         'name' : 'Wolverine',  //名稱

         'script': './bin/www', //程序入庫

         'cwd': './',           //根目錄

         'watch':[

                                 'bin',

                                 'common',

                                 'configs',

                                 'public',

                                 'routes',

                                 'views'

                   ],//需要監控的目錄

         'error_file':'./logs/app-err.log',//錯誤輸出日志

         'out_file':'./logs/app-out.log',  //日志

         'log_date_format':'YYYY-MM-DD HH:mm Z' //日期格式

         }]

      }

      隨后,我在package.json中增加了一條

      'pm2': 'pm2 start processes.json'

      在啟動就直接輸入如下命令就好:

      $ npm run pm2

      看到下面的界面,就啟動成功了,然后我們就可以關掉這個窗口了,服務不會因此停止,是不是高大上多了。

      管理和監控

      啟動成功的界面會展示App name和id,這兩個值很重要。當然這兩個值都可以在processes.json配置文件進行配置。

      打開命令行,在任何路徑下,輸入

      $ pm2 list

      就能看到啟動時的圖表界面,方便我們查看所有通過pm2管理的Nodejs服務。

      輸入,下面命令配合id或者name可以查看某一個進程的詳細信息

      $ pm2 show Wolverine 或者

      $ pm2 show 0

      內容涉及重啟次數、運行時間、腳本路徑、參數、日志路徑、運行模式等等信息

      輸入

      $ pm2 monit

      停止、重啟等命令

      $ pm2 stop [app-name|id]  #停止某一個進程,可以使用app-name或者id

      $ pm2 stop all            #停止所有進程

      $ pm2 restart all         #重啟所有的進程

      $ pm2 delete [app-name|id]#刪除并停止進程

      $ pm2 delete all          #刪除并停止所有進程

      可以進一步查看每一個服務的cpu、內存動態占用情況。

      日志監控

      如果你一直使用 tail -f log_file.log log_error.log 來查看日志,你可能會愛上下面的這個功能。

      $ pm2 logs

      $ pm2 logs [app-name]

      我們可以實時查看全部進程的日志,或者只查看某一個。我們甚至可以使用json格式查看日志。

      $ pm2 logs --json

      windows下創建服務

      1.npm i pm2 -g

      2.npm i pm2-windows-service -g

      3.安裝服務:pm2-service-install -n niumowangya (安裝后在windows服務中多了一個 niumowangya 的服務); ##卸載pm2-service-uninstall

      4.設置環境變量:PM2_SERVICE_SCRIPTS = PM2的配置文件( .pm2) or PM2_HOME=D:.pm2(自己安裝的PM2配置的路徑);

      5.windows服務中重新啟動myservice服務

      linux下創建服務

      https://pm2.io/doc/en/runtime/guide/startup-hook/?utm_source=pm2&utm_medium=website&utm_campaign=rebranding#next-steps


      荊州地區政府網站建設 解決方案 專業團隊 騰訊第三方平臺 地址:湖北省荊州市沙市區荊沙大道楚天都市佳園一期C區29棟112       地址:湖北省松滋市才知文化廣場1141-1142號     郵編:434200 聯系電話:0716-6666211     網站編輯部郵箱:business@gl-ns.com 鄂公網安備 42100202000212號 備案號:鄂ICP備2021015094號-1     企業名稱:湖北國菱計算機科技有限公司
      色国产精品一区在线观看不卡
      <samp id="sp0v5"></samp><samp id="sp0v5"><output id="sp0v5"></output></samp><span id="sp0v5"><output id="sp0v5"><nav id="sp0v5"></nav></output></span><optgroup id="sp0v5"></optgroup>

      <legend id="sp0v5"><i id="sp0v5"></i></legend>

      <cite id="sp0v5"><li id="sp0v5"></li></cite>