1. 程式人生 > >pm2介紹及使用手冊

pm2介紹及使用手冊

PM2是什麼

PM2(Process Manager 2 )是具有內建負載均衡器的Node.js應用程式的生產執行時和程序管理器。 它允許您永久保持應用程式活躍,無需停機即可重新載入它們,並促進常見的Devops任務。

PM2特性

日誌管理:應用程式日誌儲存在伺服器的硬碟中~/.pm2/logs/

負載均衡:PM2可以通過建立共享同一伺服器埠的多個子程序來擴充套件您的應用程式。這樣做還允許您以零秒停機時間重新啟動應用程式。

終端監控:可以在終端中監控您的應用程式並檢查應用程式執行狀況(CPU使用率,使用的記憶體,請求/分鐘等)。

SSH部署:自動部署,避免逐個在所有伺服器中進行ssh。

靜態服務:支援靜態伺服器功能

多平臺支援:適用於Linux(穩定)和macOS(穩定)和Windows(穩定)

PM2安裝

npm install pm2 -g

yarn global add pm2

apt update && apt install sudo curl && curl -sL https://raw.githubusercontent.com/Unitech/pm2/master/packager/setup.deb.sh | sudo -E bash -

PM2命令方式

啟動服務

pm2 start app.js                //啟動app.js應用
pm2 start app.js --name demo    //啟動應用並設定name
pm2 start app.sh                //指令碼啟動

停止服務

pm2 stop all               //停止所有應用
pm2 stop [AppName]        //根據應用名停止指定應用
pm2 stop [ID]             //根據應用id停止指定應用

刪除應用

pm2 delete all               //關閉並刪除應用
pm2 delete [AppName]        //根據應用名關閉並刪除應用
pm2 delete [ID]            //根據應用ID關閉並刪除應用

建立開機自啟動

pm2 startup

更新PM2

pm2 updatePM2
pm2 update

監聽模式

pm2 start app.js --watch    //當檔案發生變化,自動重啟

靜態伺服器

pm2 serve ./dist 9090        //將目錄dist作為靜態伺服器根目錄,埠為9090

啟用群集模式(自動負載均衡)

//max 表示PM2將自動檢測可用CPU的數量並執行儘可能多的程序
//max可以自定義,如果是4核CPU,設定為2者佔用2個
pm2 start app.js -i max

重新啟動

pm2 restart app.js        //同時殺死並重啟所有程序。短時間內服務不可用。生成環境推薦使用reload

0秒停機重新載入

pm2 reload app.js        //重新啟動所有程序,始終保持至少一個程序在執行
pm2 gracefulReload all   //優雅地以群集模式重新載入所有應用程式

檢視啟動列表

pm2 list

檢視每個應用程式佔用情況

pm2 monit

顯示應用程式所有資訊 

pm2 show [Name]      //根據name檢視
pm2 show [ID]        //根據id檢視

日誌檢視

pm2 logs            //檢視所有應用日誌
pm2 logs [Name]    //根據指定應用名檢視應用日誌
pm2 logs [ID]      //根據指定應用ID檢視應用日誌

儲存當前應用列表

pm2 save

重啟儲存的應用列表

pm2 resurrect

清除儲存的應用列表

pm2 cleardump

儲存並恢復PM2程序

pm2 update

PM2配置檔案方式

生成示例配置檔案

pm2 ecosystem        //生成一個示例JSON配置檔案
pm2 init

配置檔案示例(實際使用自行刪除)

module.exports = {
    apps : [{
        name      : 'API',      //應用名
        script    : 'app.js',   //應用檔案位置
        env: {
            PM2_SERVE_PATH: ".",    //靜態服務路徑
            PM2_SERVE_PORT: 8080,   //靜態伺服器訪問埠
            NODE_ENV: 'development' //啟動預設模式
        },
        env_production : {
            NODE_ENV: 'production'  //使用production模式 pm2 start ecosystem.config.js --env production
        },
        instances:"max",          //將應用程式分佈在所有CPU核心上,可以是整數或負數
        watch:true,               //監聽模式
        output: './out.log',      //指定日誌標準輸出檔案及位置
        error: './error.log',     //錯誤輸出日誌檔案及位置,pm2 install pm2-logrotate進行日誌檔案拆分
        merge_logs: true,         //叢集情況下,可以合併日誌
        log_type:"json",          //日誌型別
        log_date_format: "DD-MM-YYYY",  //日誌日期記錄格式
    }],
    deploy : {
        production : {
            user : 'node',                      //ssh 使用者
            host : '212.83.163.1',              //ssh 地址
            ref  : 'origin/master',             //GIT遠端/分支
            repo : '[email protected]:repo.git',   //git地址
            path : '/var/www/production',       //伺服器檔案路徑
            post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production'  //部署後的動作
        }
    }
};