<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何使用PM2做進程管理

          共 6834字,需瀏覽 14分鐘

           ·

          2021-08-14 13:34

          須彌零一

          注意:?由于微信的限制,本文中的超鏈接可能不會在文中顯示,建議點擊文末的?閱讀原文?查閱。

          簡介

          什么是PM2?

          PM2?P(rocess) M(anager) 2?是一個內(nèi)建了負載均衡器的守護進程管理器,可以幫助我們進行應(yīng)用程序管理。通過PM2,可以保持我們的服務(wù)?7*24?在線,并且在服務(wù)重載的時候可以保證零停機。

          PM2創(chuàng)建初期時專門為Node.js應(yīng)用打造的,所以PM2是依賴于Node.js的。當前PM2的穩(wěn)定版本是?5.0.3,適用于所有 Linux, macOS 和 Windows的穩(wěn)定版本,并且支持?Node.js 12.X?開始的所有 Node.js。

          PM2項目的原始資料

          此處記錄一下PM2的官網(wǎng)資料傳送門,防止迷路,其中資料都是英文的。如果你想先簡單了解一下可以跳過這部分直接看下面的 如何安裝PM2 章節(jié)。

          ?PM2 在 Github 上的項目?PM2 在 npm 上的介紹?PM2 的商業(yè)官方站點

          PM2的特性

          7a44a4d8a6aadab8567be15fabf56e8c.webp

          以上是官網(wǎng)站點上對PM2全特性的標簽,上面的單詞都很容易懂,就不做翻譯了。如果你想了解更多相關(guān)特性的細節(jié),可以前往 官方站點 首頁查閱。

          快速上手

          本章節(jié)默認您的環(huán)境已經(jīng)安裝了Node.js, 如果您沒有安裝請先提前安裝Node.js。點擊下載Node.js

          安裝PM2

          1.使用 NPM 安裝:

          $ npm install pm2 -g

          2.使用 YARN 安裝:

          $ yarn global add pm23.如果您沒有Node.js,嘗試使用如下安裝方式:?注意:本人嘗試沒成功,可能站點已經(jīng)移除了,不建議使用wget -qO- https://getpm2.com/install.sh | bash


          啟動應(yīng)用

          首先準備一個如下的Node.js服務(wù)器腳本,腳本名我們定為?app1.js

          const http =require('http')const hostname ='127.0.0.1'const port =3001const server = http.createServer((req, res)=>{  res.statusCode =200  res.setHeader('Content-Type','text/plain')  res.end('My Application 1\n')})server.listen(port, hostname,()=>{  console.log(`服務(wù)器運行在 http://${hostname}:${port}/`)})

          使用如下命令來啟動上述應(yīng)用。

          $ pm2 start app1.js
          11b53dc6f81e2dc8772b55575b3a21a7.webp

          上圖顯示我們已經(jīng)將app1啟動成功了,驗證一下:

          479612589f114ca6e583adc386b0fcba.webp

          啟動語法介紹

          使用?pm2 start xxx?的語法方式,我們啟動 Node.js, Python, Ruby 以及其他在環(huán)境變量?$PATH?中設(shè)置了的二進制程序。例如:

          $ pm2 start bashscript.sh$ pm2 start python-app.py --watch$ pm2 start binary-file ----port 1520

          啟動命令可以使用的參數(shù)

          # 指定應(yīng)用名稱--name <app_name># 監(jiān)視并且在文件發(fā)生變更時重啟應(yīng)用--watch# 設(shè)置應(yīng)用重新加載的內(nèi)存閾值--max-memory-restart <200MB># 指定日志文件--log <log_path># 將額外的參數(shù)傳遞給腳本-- arg1 arg2 arg3# 自動重啟間的延遲--restart-delay <delay in ms># 給日志加上時間戳前綴--time# 禁用自動重啟應(yīng)用--no-autorestart# 設(shè)置 cron 強制重啟--cron <cron_pattern># 附加到應(yīng)用程序日志--no-daemon

          更多參數(shù)查看使用?pm2 -h?或?pm2 start -h?命令查看。

          進程管理

          你可以復制上面的?app1.js?多創(chuàng)建幾個服務(wù)來邊寫邊練。記得修改每個js中的端口號,并使其不同。復制并修改完成后,您可以結(jié)合上面的啟動命令并加上不同的參數(shù)來啟動多個服務(wù)。

          通過如下的命令可以列出正在運行中的服務(wù)列表:

          $ pm2 list

          顯示結(jié)果可能如下,結(jié)果會根據(jù)您啟動的服務(wù)不同而不同。

          9ac852973e0292a589d29932176676da.webp

          管理命令

          PM2的管理命令都很簡單直白,具體如下:

          ?列出運行中的服務(wù)列表,下面三種方式都可以

          $ pm2 list$ pm2 ls$ pm2 status

          ?停止應(yīng)用

          $ pm2 stop <app_name|namespace|id|'all'|json_conf>?重啟應(yīng)用$ pm2 restart <app_name|namespace|id|'all'|json_conf>?刪除應(yīng)用$ pm2 delete<app_name|namespace|id|'all'|json_conf>?查看指定應(yīng)用詳情$ pm2 describe <id|app_name>


          $ pm2 show <id|app_name>

          ?監(jiān)控日志,自定義智標和應(yīng)用信息

          $ pm2 monit


          日志命令

          ?顯示實時日志:

          $ pm2 logs

          ?顯示較早的日志:

          $ pm2 logs --lines 200


          集群模式

          對于 Node.js 應(yīng)用程序,PM2 包括一個自動負載平衡器,它將在每個衍生進程之間共享所有 HTTP[s]/Websocket/TCP/UDP 連接。使用如下命令進行集群模式啟動,其中?max?的值為當前系統(tǒng)的?CPU核心數(shù)減1?,當然我們也可以改成任意數(shù)字,表示集群的實例數(shù):

          $ pm2 start app.js -i max

          零離線重載

          熱重載允許在不停機的情況下更新應(yīng)用程序。使用如下命令:

          $ pm2 reload all

          注:上面的all表示所有的服務(wù)進程,除此之外還可以使指定id, 或應(yīng)用名稱

          開機啟動

          $ pm2 startup

          凍結(jié)進程列表并自動復位:

          $ pm2 save

          PM2更新

          簡單直白的方法:

          $ npm install pm2@latest -g

          PM2常用命令示例

          # Fork modepm2 start app.js --name my-api # Name process# Cluster modepm2 start app.js -i 0# Will start maximum processes with LB depending on available CPUspm2 start app.js -i max      # Same as above, but deprecated.pm2 scale app +3# Scales `app` up by 3 workerspm2 scale app 2# Scales `app` up or down to 2 workers total# Listingpm2 list               # Display all processes statuspm2 jlist              # Print process list in raw JSONpm2 prettylist         # Print process list in beautified JSONpm2 describe 0# Display all informations about a specific processpm2 monit              # Monitor all processes# Logspm2 logs [--raw]# Display all processes logs in streamingpm2 flush              # Empty all log filespm2 reloadLogs         # Reload all logs# Actionspm2 stop all           # Stop all processespm2 restart all        # Restart all processespm2 reload all         # Will 0s downtime reload (for NETWORKED apps)pm2 stop 0# Stop specific process idpm2 restart 0# Restart specific process idpm2 delete0# Will remove process from pm2 listpm2 delete all         # Will remove all processes from pm2 list# Miscpm2 reset <process># Reset meta data (restarted time...)pm2 updatePM2          # Update in memory pm2pm2 ping               # Ensure pm2 daemon has been launchedpm2 sendSignal SIGUSR2 my-app # Send system signal to scriptpm2 start app.js --no-daemonpm2 start app.js --no-vizionpm2 start app.js --no-autorestart

          我們還可以使用命令?pm2 examples?來查閱常用命令示例。

          高級特性

          PM2的配置文件

          PM2的配置文件叫做生態(tài)系統(tǒng)文件(Ecosystem File),它管理著眾多的應(yīng)用。使用如下命令可以生成一個生態(tài)系統(tǒng)文件:

          $ pm2 ecosystem

          上面的命令執(zhí)行完畢可以生成一個文件名為?ecosystem.config.js?的文件,內(nèi)容大致如下:

          module.exports ={  apps :[{    script:'index.js',    watch:'.'},{    script:'./service-worker/',    watch:['./service-worker']}],  deploy :{    production :{      user :'SSH_USERNAME',      host :'SSH_HOSTMACHINE',ref:'origin/master',      repo :'GIT_REPOSITORY',      path :'DESTINATION_PATH','pre-deploy-local':'','post-deploy':'npm install && pm2 reload ecosystem.config.js --env production','pre-setup':''}}};

          我們可以修改上述配置文件,然后使用命令?pm2 start ecosystem.config.js?的方法來啟動新的服務(wù)。

          這部分在這里就不多講了,因為內(nèi)容很多。如果您想了解更多關(guān)于PM2生態(tài)系統(tǒng)文件的內(nèi)容以及配置文件中每個字段的屬性和含義可以在官方文檔中找到。點此查看 PM2 ecosystem 使用指導

          為什么這里要提這個PM2 ecosystem,而不愿意多講呢。因為下面要講的如何使用PM2來啟動和管理非Node.js程序 (例如:Spring Boot項目),會用到這個特性,所以先給大家混個眼熟。

          使用PM2管理非Node.js項目

          命令行方式

          PM2管理非Node.js最簡單的方式是在?pm2 start xxx?這樣啟動的命令行中,加上?--interpreter?來指定解釋執(zhí)行器來達到執(zhí)行非Node.js項目的目的,例如:

          $ pm2 start my_app.py --interpreter '/usr/bin/python'$ pm2 start my_app.bat --interpreter 'cmd.exe'

          生態(tài)系統(tǒng)文件方式

          上一節(jié)大概知道了pm2有一個生態(tài)系統(tǒng)文件,下面簡單介紹一下如何使用生態(tài)文件系統(tǒng)配置的方式來指定我們的執(zhí)行程序。

          創(chuàng)建配置文件

          使用如下命令即可生成一個簡單的配置文件。

          $ pm2 init simple

          執(zhí)行完畢后,生成的?ecosystem.config.js, 內(nèi)容如下:

          module.exports ={  apps :[{    name   :"app1",    script :"./app.js"}]}

          注意?:您如果要重新修改上述配置的文件名或者手動創(chuàng)建配置文件,則必須保證文件的后綴為?.config.js?,要不然PM2無法識別。

          自定義編寫配置文件

          此處以執(zhí)行 Spring Boot 項目為例來說明,更多的配置文件說明請查閱 官網(wǎng)文檔。

          module.exports ={  apps :[{    name   :"app6",    script :"java.exe","args":["-jar","app6.jar"],"exec_interpreter":"","exec_mode":"fork"}]}

          以上配置文件參數(shù)說明如下:

          ?name?進程名稱(顯示在pm2 list命令中)?script?執(zhí)行進程名稱,如果需要執(zhí)行PHP腳本則填寫php解釋器的路徑,本文為java?args?傳給執(zhí)行進程的參數(shù),多個參數(shù)以數(shù)組單元分割?exec_interpreter?NodeJs解析器,本文不適用?exec_mode?執(zhí)行模式[cluster|fork]這個針對NodeJs應(yīng)用的配置,非NodeJs應(yīng)用統(tǒng)一fork

          啟動服務(wù)

          假設(shè)上面的配置文件我們命名為了?app6.config.js,則使用如下命令啟動:

          $ pm2 start app6.config.js
          2744c663486c3e1a3f03437a1c6c1d49.webp

          至此我們已經(jīng)成功的使用PM2將?Spring Boot?項目管理起來了。

          執(zhí)行配置文件中的部分服務(wù)

          細心的你是否發(fā)現(xiàn)了上面的配置文件中?app?的值是一個數(shù)組,這就意味著我們可以在一個配置文件中配置多個服務(wù)。假如我們的配置文件中有三個名字分別為?app1,?app2,?app3?的三個服務(wù),當我們想啟動部分服務(wù)時可以使用?--only?參數(shù)來完成。

          啟動 app1:

          $ pm2 start ecosystem.config.js --only "app1"

          啟動 app1 和 app3:

          $ pm2 start ecosystem.config.js --only "app1,app3"

          注意:?--only?參數(shù)只能用在?start/restart/stop/delete?這些子命令中。

          切換運行環(huán)境

          我們可以使用配置文件中的?env_*?選項來指定不同的環(huán)境變量,例如:

          module.exports ={  apps :[{    name   :"app1",    script :"./app.js",    env_production:{       NODE_ENV:"production"},    env_development:{       NODE_ENV:"development"}}]}

          運行時切換環(huán)境很簡單,使用?--env [env name]?選項即可,例如:

          $ pm2 start process.json --env production$ pm2 restart process.json --env development

          重要的一點

          本章節(jié)僅僅是介紹了一個配置文件的皮毛。僅僅可以讓你對配置文件有個簡單的了解并且通過簡單配置可以執(zhí)行非Node.js的項目。但是PM2的配置文件的配置項很多,建議讀者還是去 官網(wǎng)文檔 看看都有那些配置項,這樣能更好的幫助您定制化自己所期望的服務(wù)治理。

          最后

          如同在 PM2的特性 章節(jié)中所列出的一樣,PM2還有很多特性是在本片文章中沒有介紹的。如果你對PM2比較感興趣,建議去 官方站點 翻閱相關(guān)資料。

          注意:?由于微信的限制,本文中的超鏈接可能不會在文中顯示,建議點擊文末的?閱讀原文?查閱。

          ---- END ----



          歡迎關(guān)注我的公眾號“須彌零一”,更多技術(shù)文章第一時間推送。

          瀏覽 97
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  手机看片婷婷青青草 | 亚洲视频高清无码 | 国产精品视频在线免费观看 | 黄色一类操逼片 | 欧美老妇人性爱网站 |