node守护工具-PM2使用

内部测试服务器是最近新装的,没有supervisorctl 这个程序管理工具。不过前一阵得知node应该用更加适配的工具进行管理,那就PM2。试用了一下非常强大,特此记录一下使用流程。非常使用用来做node 守护及相关管理。

文章目录

  • 1 安装
  • 2 基础命令
    • 2.1 查看pm2 管理的应用
    • 2.2 基础命令(启动 重启 停止)
    • 2.3 查看进程详细信息
    • 2.4 无缝重启程序
  • 3 PM2集群模式(负载均衡)
  • 4 配置文件
    • 4.1 配置文件(环境变量)
    • 4.2 参考配置
    • 4.3 使用
  • 5 日志管理
    • 5.1 日志管理命令
    • 5.2 日志配置
      • 5.2.1 配置log位置(通过环境配置)
    • 5.2 拆分重载日志
    • 5.3 合并日志
  • 6 开机自启动
  • 7 远程部署
  • 8 参考链接

PM2是具有内置负载均衡器的Node.js应用程序的生产运行时和进程管理器。它允许您永久保持应用程序活跃,无需停机即可重新加载它们,并促进常见的Devops任务。

1 安装

npm install pm2 -g

全局安装pm2

您可以像这样启动任何应用程序(Node.js,Python,Ruby,$ PATH中的二进制文件…):

pm2 start app.js
pm2 start app.js --name app

简单守护

集成守护使用,在生产环境总可能没有安装pm2 我们可以使用

RUN npm install pm2 -g
CMD [ "pm2-runtime", "npm", "--", "start" ]

2 基础命令

2.1 查看pm2 管理的应用

pm2 list

在这里插入图片描述

2.2 基础命令(启动 重启 停止)

$ pm2 stop     
$ pm2 restart  
$ pm2 delete   

比如启动express 可以在express根目录下

pm2 start bin/www 

如果我们在后面加入watch参数,每当代码改变时即会自动重启,如下:

sudo pm2 start bin/www --watch

2.3 查看进程详细信息

pm2 describe 

该命令可以查看工程运行目录,node与你新高版本,日志目录,项目git位置等

要监控日志,自定义指标,应用程序信息:

pm2 monit

2.4 无缝重启程序

 pm2 reload all

3 PM2集群模式(负载均衡)

群集模式是启动Node.js应用程序时的一种特殊模式,它启动多个进程并在它们之间对HTTP / TCP / UDP进行负载均衡。**这提高了整体性能(16核机器上的x10倍)**和可靠性(在未处理错误的情况下更快的套接字重新平衡)。

以集群模式启动Node.js应用程序,该应用程序将利用所有可用的CPU:

pm2 start api.js -i 

可以为’max’,-1(所有具有的cpu减1)或指定数量的实例开始。

如:sudo pm2 start bin/www -i max
node守护工具-PM2使用_第1张图片

监视从命令行直接启动的所有进程:

 pm2 monit

4 配置文件

配置文件官方文档:http://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/

4.1 配置文件(环境变量)

the ecosystem file的目的是为所有应用程序收集所有选项和环境变量。

pm2 init 

node守护工具-PM2使用_第2张图片
//初始化一个环境配置,它会输出一个config地址
您可以为多个环境声明变量。每个环境密钥必须具有以下格式:env_。
例如,app可以在两个环境中启动以下过程:development和production。

我们可以配置在不同环境下的特定参数,在express中 process.env.NODE_ENV即可传递进去

要app在特定环境中启动它,请使用–env标志:
在这里插入图片描述

4.2 参考配置

  apps : [{
    name: 'pm2 test',//app name 在pm2 管理中那个名字
    script: './bin/www', //启动路径
    instances: 1,//负载均衡实例数
    autorestart: true,//是否自动重启
    watch: [  //通过监视功能需要监视的文件夹
	         "bin",
           "routers",
           "controllers"
	  ],
	  ignore_watch : [  //通过监视功能忽略某些文件或文件夹名称的正则表达式列表
		        "node_modules", 
		        "logs",
		        "public"
    ],
    watch_options: {
      "followSymlinks": false
    },
    max_memory_restart: '1G',
    output: './logs/pm2_out.log',//console.log 输出位置
    error: './logs/pm2_error.log',//console.error 输出位置
    log_date_format: "YYYY-MM-DD HH:mm Z",//log前面加上时间戳
    merge_logs: true,//多实例情况下合并log
    env: {//环境变量配置
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],

4.3 使用

 pm2 start ecosystem.config.js 

//这里我们使用配置文件的方式代替 pm2 start 方式启动

5 日志管理

pm2 logs 查看控制台相应输出(实时日志)

5.1 日志管理命令

$ pm2 logs APP-NAME        #  显示APP-NAME日志 
$ PM2 logs  --json          #  JSON输出 
$ PM2 logs  --format        #  格式化输出 
$ pm2 flush                #  刷新所有日志(清空)
$ pm2 reloadLogs           #  重新加载所有日志 

5.2 日志配置

5.2.1 配置log位置(通过环境配置)

您可以为日志指定自定义位置。

module.exports = {
  apps: [{
      name: 'app',
      script: 'app.js',
      output: './out.log',
      error: './error.log',
	    log: './combined.outerr.log',
    }]
}
output 只是标准输出(console.log)
error 只是错误输出(console.error)
log结合output并error,默认情况下禁用

5.2 拆分重载日志

pm2 install pm2-logrotate

5.3 合并日志

在群集模式下,每个群集都有自己的日志文件。您可以使用合并选项将所有日志收集到单个文件中:

module.exports = {
  apps: [{
      name: 'app',
      script: 'app.js',
      output: './out.log',
      error: './error.log',
      merge_logs: true,
	log_date_format: "DD-MM-YYYY"
    }]
}

6 开机自启动

解决最近核心矛盾

1 保存当前管理应用程序状态

pm2 save

2 生成自启动脚本

pm2 startup

pm2 startup ubuntu //你的操作系统
要获取计算机的自动配置启动脚本
此命令的输出可以是复制/粘贴行的建议,其中包含为您配置的所有环境变量和选项。
3 您只需复制/粘贴 PM2为您提供的行,并为您的操作系统配置启动脚本即可。
4 禁用自启动
pm2 unstartup
您只需复制/粘贴 PM2为您提供的行,并为您的操作系统配置启动脚本即可。

7 远程部署

http://pm2.keymetrics.io/docs/usage/deployment/#simple-deploy

8 参考链接

https://www.cnblogs.com/chyingp/p/pm2-documentation.html
官方文档:
https://www.npmjs.com/package/pm2
https://pm2.io/doc/en/runtime/guide/process-management/?utm_source=github

你可能感兴趣的:(nodejs)