node實踐--node集體管理工具PM2用法簡介

內容轉自:PM2用法簡介

簡介

PM2是node進程管理工具,可以利用它來簡化很多node應用管理的繁瑣任務,如性能監控、自動重啓、負載均衡等,而且使用非常簡單。引用

全局安裝

sudo npm install pm2@latest -g

用法

  • 最簡單的啓用一個應用: pm2 start app.js
  • 停止:pm2 stop app_name|app_id
  • 刪除:pm2 delete app_name|app_id
  • 重啓:pm2 restart app_name|app_id
  • 停止所有:pm2 stop all
  • 查看所有的進程:pm2 list
  • 查看所有的進程狀態:pm2 status
  • 查看某一個進程的信息:pm2 describe app_name|app_id

參數說明

  • --watch:監聽應用目錄源碼的變化,一旦發生變化,自動重啓。如果要精確監聽、不見聽的目錄,最好通過配置文件
  • -i --instances:啓用多少個實例,可用於負載均衡。如果-i 0或者-i max,則根據當前機器核數確定實例數目,可以彌補node.js缺陷
  • --ignore-watch:排除監聽的目錄/文件,可以是特定的文件名,也可以是正則。比如--ignore-watch="test node_modules "some scripts"
  • -n --name:應用的名稱。查看應用信息的時候可以用到
  • -o --output <path>:標準輸出日誌文件的路徑,有默認路徑
  • -e --error <path>:錯誤輸出日誌文件的路徑,有默認路徑
  • --interpreter <interpreter>:the interpreter pm2 should use for executing app (bash, python...)。比如你用的coffee script來編寫應用

完整參數命令: pm2 start index.js --watch -i 2

配置文件

  • 配置文件裏的設置項,跟命令行參數基本是一一對應的
  • 配置文件的格式可以爲json/yaml
  • json格式的配置文件,pm2當作普通的js文件來處理,所以可以在裏面添加註釋或者編寫代碼,這對於動態調整配置很有好處
  • 如果啓動的時候指定了配置文件,那麼命令行參數會被忽略(個別參數除外,比如--env)

完整參數單個app配置:

{
  "name"             : "node-app", //啓動app名稱
  "cwd"              : "/srv/node-app/current", 
  "args"             : ["--toto=heya coco", "-d", "1"],
  "script"           : "bin/app.js",
  "node_args"        : ["--harmony", " --max-stack-size=102400000"],
  "log_date_format"  : "YYYY-MM-DD HH:mm Z",
  "error_file"       : "/var/log/node-app/node-app.stderr.log",
  "out_file"         : "log/node-app.stdout.log",
  "pid_file"         : "pids/node-geo-api.pid",
  "instances"        : 6, //or 0 => 'max'
  "min_uptime"       : "200s", // 200 seconds, defaults to 1000
  "max_restarts"     : 10, // defaults to 15
  "max_memory_restart": "1M", // 1 megabytes, e.g.: "2G", "10M", "100K", 1024 the default unit is byte.
  "cron_restart"     : "1 0 * * *",
  "watch"            : false,
  "ignore_watch"      : ["[\\/\\\\]\\./", "node_modules"],
  "merge_logs"       : true,
  "exec_interpreter" : "node",
  "exec_mode"        : "fork",
  "autorestart"      : false, // enable/disable automatic restart when an app crashes or exits
  "vizion"           : false, // enable/disable vizion features (versioning control)
  // Default environment variables that will be injected in any environment and at any start
  "env": {
    "NODE_ENV": "production",
    "AWESOME_SERVICE_API_TOKEN": "xxx"
  }
  "env_*" : {
    "SPECIFIC_ENV" : true
  }
}

完整配置文件寫法:

{
  "apps" : [{
    // Application #1
    "name"        : "worker-app",
    "script"      : "worker.js",
    "args"        : ["--toto=heya coco", "-d", "1"],
    "watch"       : true,
    "node_args"   : "--harmony",
    "merge_logs"  : true,
    "cwd"         : "/this/is/a/path/to/start/script",
    "env": {
      "NODE_ENV": "development",
      "AWESOME_SERVICE_API_TOKEN": "xxx"
    },
    "env_production" : {
       "NODE_ENV": "production"
    },
    "env_staging" : {
       "NODE_ENV" : "staging",
       "TEST"     : true
    }
  },{
    // Application #2
    "name"       : "api-app",
    "script"     : "api.js",
    "instances"  : 4,
    "exec_mode"  : "cluster_mode",
    "error_file" : "./examples/child-err.log",
    "out_file"   : "./examples/child-out.log",
    "pid_file"   : "./examples/child.pid"
  }]
}

通過yaml管理多個應用

process.yml:

apps:
  - script   : app.js
    instances: 4
    exec_mode: cluster
  - script : worker.js
    watch  : true
    env    :
      NODE_ENV: development
    env_production:
      NODE_ENV: production

啓動:pm2 start process.yml

環境切換

正式開發中分爲不同的環境(開發環境、測試環境、生產環境),我們需要根據不同的情景來切換各種環境
pm2通過在配置文件中通過env_xx來聲明不同環境的配置,然後在啓動應用時,通過--env參數指定運行的環境

環境配置定義,在應用中,可以通過process.env.REMOTE_ADDR等來讀取配置中生命的變量:

  "env": {
    "NODE_ENV": "production",
    "REMOTE_ADDR": "http://www.example.com/"
  },
  "env_dev": {
    "NODE_ENV": "development",
    "REMOTE_ADDR": "http://wdev.example.com/"
  },
  "env_test": {
    "NODE_ENV": "test",
    "REMOTE_ADDR": "http://wtest.example.com/"
  }

啓動指定的環境:pm2 start app.js --env development

負載均衡

  pm2 start app.js -i 3 # 開啓三個進程
  pm2 start app.js -i max # 根據機器CPU核數,開啓對應數目的進程 

開機自動啓動

  1. 通過pm2 save保存當前進程狀態。
  2. 通過pm2 startup [platform]生成開機自啓動的命令。例如:pm2 startup centeros
  3. 將步驟2生成的命令,粘貼到控制檯進行,搞定。

更新

安裝最新的:npm install pm2@latest -g
然後在內存中更新:pm2 update

參考

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章