pm2的基本使用

pm2的基本使用

目录

1、pm2的安装... 2

2、更新PM2. 3

3、上传项目到服务器并使用普通方式启动... 3

4、使用pm2启动项目... 4

5、pm2对项目的基本管理操作... 6

5.1、启动项目... 6

5.2、列出PM2管理的所有应用程序... 6

5.3、停止项目... 7

5.3.1、停止某个项目... 7

5.3.2、停止所有项目... 7

5.4、重启项目... 7

5.4.1、重启某个项目... 7

5.4.2、重启所有项目... 8

5.5、删除项目进程... 8

5.5.1、删除某个项目进程... 8

5.5.2、删除所有项目进程... 8

6、pm2携带参数启动项目... 9

6.1、面携带参数进行启动示例... 9

6.2、常用入参... 9

7、查看日志... 10

7.1、默认文件位置... 10

7.2、使用命令查看历史日志... 11

7.3、常用日志操作命令... 12

8、查看仪表盘... 12

9、使用生态系统文件启动项目... 13

9.1、准备需要pm2托管的项目... 13

9.2、创建生态系统文件... 13

9.3、设置配置文件... 15

9.4、使用生态系统文件静启动项目... 19

9.4、配置文件中pm2的可用属性... 20

 

1、pm2的安装

pm2是基于npm进行安装的,在安装pm2之前要先安装npm

安装pm2

命令:

       sudo npm install -y pm2 -g

查看pm2的安装路径

命令:

       sudo whereis pm2

查看安装的pm2的版本

命令:

       sudo pm2 -v

出现上图所示表示安装成功。

2、更新PM2

更新PM2非常快(少于几秒)并且无缝。

首先确保您正确保存了所有进程:

   sudo pm2 save

然后从NPM安装最新的PM2版本:

    sudo npm install pm2 -g

最后更新内存中的PM2进程:

    sudo pm2 update

就是这样,您现在拥有了一个全新的PM2系统!

3、上传项目到服务器并使用普通方式启动

使用工具上传需要部署的项目到服务器上,目录为/opt/下

进入项目路径下,查看启动文件

命令:

       cd /opt/Test/        //进入目录/opt/Test/  

       ll            //查看当前目录先的所有文件

项目的启动文件为app.js

使用普通方式启动项目

命令:

       sudo npm start app.js

启动完成,在浏览器中访问

后台窗口打印如下

此时项目正常启动,这样启动项目的缺点就是,Xshell窗口断开连接以后项目就停止运行了,所以需要用到守护进行的工具,因此可以采用pm2

4、使用pm2启动项目

使用pm2启动项目的方式有多种

启动单个项目

进入项目路径

命令:

       cd /opt/Test/

注意:使用pm2启动项目时,默认是通过自己项目中的package.json中的配置进行启动的,需要查看项目中的package.jsonstart的配置。

查看项目中的文件

命令:

       ll            //查看当前目录先的所有文件

使用vim查看package.json文件

命令:

       sudo vim package.json

查看scripts下的start的配置值,根据这个启动路径进行启动。记住这个启动路径,退出查看。

在项目路径下启动项目

命令:

       sudo pm2 start ./bin/www         //启动当前项目

项目正常启动

到浏览器中访问项目

启动成功

5、pm2对项目的基本管理操作

5.1、启动项目

命令:

       sudo pm2 start ./bin/www         //在项目为Test的路径下执行的命令

5.2、列出PM2管理的所有应用程序

命令:

       sudo pm2 ls

或者使用list

命令:

       sudo pm2 list

两个命令都能列出当前PM2管理的所有应用程序

5.3、停止项目

5.3.1、停止某个项目

指定项目app name或id

命令:

       sudo pm2 stop www           //停止项目名为www的应用程序

或者

       sudo pm2 stop 0         //停止项目id为0的应用程序

正常停止以后项目的status变为stopped(已停止)状态

5.3.2、停止所有项目

命令:

       sudo pm2 stop all        //停止pm2管理的所有应用程序

5.4、重启项目

5.4.1、重启某个项目

使用restart重启指定项目app name或id

命令:

       sudo pm2 restart www        //重启项目名为www的应用程序

或者

       sudo pm2 restart 0             //重启项目id为0的应用程序

正常重启以后项目的status变为online(在线)状态

使用reload重载(重启)指定项目app name或id

命令:

       sudo pm2 reload www        //重载项目名为www的应用程序

或者

       sudo pm2 reload 0             //重载项目id为0的应用程序

该命令不会执行后不会自动列出管理列表

5.4.2、重启所有项目

命令:

       sudo pm2 restart all            //重启pm2管理的所有应用程序

或者

       sudo pm2 reload all            //重载pm2管理的所有应用程序

5.5、删除项目进程

5.5.1、删除某个项目进程

在进行删除某个项目进程时,一般通需要先停止一段时间才会在去删除该进程

命令:

       sudo pm2 delete www        //删除项目名为www的应用程序的进程

或者

       sudo pm2 delete 0              //删除项目id为0的应用程序的进程

 

5.5.2、删除所有项目进程

命令:

       sudo pm2 delete all            //删除pm2管理的所有应用程序的进程

6、pm2携带参数启动项目

在启动命令的后面携带参数进行启动

6.1、面携带参数进行启动示例

例:启动应用程序并设置该应用程序名称为test

在目录/opt/存在node项目Test ,进入项目之后进行启动

不设置应用程序进程名称进行启动

       sudo pm2 start ./bin/www

设置应用程序进程名称为test进行启动

       sudo pm2 start ./bin/www --name test           //启动应用程序并设置进程名称为test

6.2、常用入参

# 指定应用程序名称
--name <app_name>

# 当文件更改时,重启应用程序
--watch

# 为应用程序重新加载设置内存阈值
--max-memory-restart <200MB>

# 指定日志文件
--log <log_path>

# 向脚本传递额外的参数
-- arg1 arg2 arg3

# 自动重启之间的延迟
--restart-delay <delay in ms>

# 在日志前面加上时间前缀
--time

# 不要自动重启应用程序
--no-autorestart

# 为强制重启指定cron
--cron <cron_pattern>

# 附加到应用程序日志
--no-daemon

7、查看日志

7.1、默认文件位置

pm2生成的日志文件的默认路径在$ HOME /.pm2/logs /下面

进入.pm2目录,就可以看到pm2输出的相关文件

命令:

       cd .pm2/

       ll

进入logs/目录下就可以看到相关的日志了

命令:

       cd logs/

       ll

7.2、使用命令查看历史日志

命令:

       sudo pm2 logs --lines 200         //查看历史日志

打印实时日志

命令:

       sudo pm2 logs             //实时显示日志

7.3、常用日志操作命令

sudo pm2 logs --raw			# 显示流中的所有进程日志
sudo pm2 flush			# 清空所有日志文件
sudo pm2 reloadLogs		# 重新加载所有日志

8、查看仪表盘

命令:

       sudo pm2 monit          //查看仪表盘

仪表盘可以显示实时监控的动态数据,退出Ctrl+C

9、使用生态系统文件启动项目

9.1、准备需要pm2托管的项目

先准备两个测试项目Test1和Test2(这里两个项目都为nodejs项目),两个项目都放在/opt/目录下,两个项目监听的端口不同

9.2、创建生态系统文件

pm2的生态文件,允许您通过流程文件微调每个应用程序的行为,选项,环境变量,日志文件。它对基于微服务的应用程序特别有用。可以使用Javascript,JSON和YAML格式的文件进行配置。

首先需要先由pm2命令生成生态系统文件的模板。

在当前用户目录下创建project目录进行存放生态系统文件(该位置不固定,任意目录下都可创建生态系统文件,这里只是为了方便自己管理)

创建project目录

命令:

       sudo mkdir project       //创建目录

       ll                                 //查看当前目录下的所有文件

文件创建完成以后进入project目录

命令:

       cd project/

使用pm2命令创建pm2的生态系统文件

命令:

       sudo pm2 ecosystem          //创建pm2的生态系统文件样本ecosystem.config.js

查看当前目录下的文件

命令:

       ll

打开样本文件查看文件内容

命令:

       sudo vim ecosystem.config.js

可以看到样本文件中的基本信息。

9.3、设置配置文件

将ecosystem.config.js文件根据自己的需求进行编辑

在配置文件中apps是一个数组因此可以支持多个项目的配置,每个项目用一个json串来进行配置,项目之间用逗号隔开即可。

以下配置文件配置了之前准备的Test1和Test2两个项目

文本配置

module.exports = {
  apps : [{
    name: 'Test1',                    //进程名称(可以为启动的这个实例自定义一个名称)
    script: '/opt/Test1/bin/www',    //实例启动脚本路径

    args: 'one two',                //需要传递给脚本的所有参数的字符串
    instances: 1,                    //当前这个实例需要启动的个数,通常用于集群
//autorestart默认为true。如果为false,当应用程序崩溃或平稳结束,则PM2将不会重新启动您的应用程序
    autorestart: true,		
//watch默认为false,修改为true后,会启用监视和重启功能,如果文件夹或子文件夹中的文件发生更改,应用程序将重新加载
    watch: false,
    max_memory_restart: '1G',        //如果超过指定的内存量,您的应用将重新启动

	/*
	//用于生产环境与开发环境的切换
	env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }*/

	//项目日志的管理
	log_date_format: 'YYYY-MM-DD HH:mm Z',                    //日志日期格式
	error_file: '/home/aaron/project/Test1/Test1_error.log',    //错误日志文件输出路径
	out_file: '/home/aaron/project/Test1/Test1_out.log',        //正确日志输出文件
	combine_logs: true,        //如果设置为true,则避免使用进程ID后缀日志文件
	merge_logs: true,                                        //combine_logs的别名
	pid_file: '/home/aaron/project/Test1/Test1_pid.log'        //pid日志文件路径

  },
{
    name: 'Test2',
    script: '/opt/Test2/bin/www',

    // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
    args: 'one two',
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',

    /* 
	//用于生产环境与开发环境的切换
	env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }*/

	//项目日志的管理
	log_date_format: 'YYYY-MM-DD HH:mm Z',                        //日志日期格式
	error_file: '/home/aaron/project/Test2/Test2_error.log',        //错误日志文件输出路径
	out_file: '/home/aaron/project/Test2/Test2_out.log',            //正确日志输出文件
	combine_logs: true,                    //如果设置为true,则避免使用进程ID后缀日志文件
	merge_logs: true,                                                //combine_logs的别名
	pid_file: '/home/aaron/project/Test2/Test2_pid.log'               //pid日志文件路径


  }
  ],

  deploy : {
    production : {
      user : 'node',
      host : '212.83.163.1',
      ref  : 'origin/master',
      repo : 'git@github.com:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};

9.4、使用生态系统文件静启动项目

文件配置完成以后就可以启动项目了,但是使用pm2的生态系统文件进行启动时,我们需要启动的不是某个具体的项目而是启动配置完成的这个生态系统文件

命令:

       sudo pm2 start ecosystem.config.js

执行完成这个命令以后,系统会先找相关的日志文件,没有的会先进行创建。

因为日志文件也配置在了当前目录下,查看当前目录下的文件,接着进行启动项目。

命令:

      ll

项目启动完成测试访问

在浏览器中访问Test1项目监听的是3000端口

访问成功,Test1项目正常运行

在浏览器中访问Test1项目监听的是3001端口

访问成功,Test2项目正常运行

9.4、配置文件中pm2的可用属性

可以使用以下属性微调应用程序行为和配置:

一般

领域

类型

描述

name

(string)

“my-api”

应用程序名称(默认为脚本文件名,没有扩展名)

script

(string)

”./api/app.js”

脚本路径相对于pm2开始

cwd

(string)

“/var/www/”

应用程序将从中启动的目录

args

(string)

“-a 13 -b 12”

包含通过CLI传递给脚本的所有参数的字符串

interpreter

(string)

“/usr/bin/python”

解释器绝对路径(默认为节点)

interpreter_args

(string)

”–harmony”

传递给解释器的选项

node_args

(string)

 

别名为interpreter_args

高级功能

领域

类型

描述

instances

number

-1

要启动的应用实例数

exec_mode

string

“cluster”

模式启动你的应用程序,可以是“集群”或“分叉”,默认分叉

watch

boolean or []

true

启用监视和重启功能,如果文件夹或子文件夹中的文件发生更改,您的应用程序将重新加载

ignore_watch

list

[”[\/\\]\./”, “node_modules”]

通过监视功能忽略某些文件或文件夹名称的正则表达式列表

max_memory_restart

string

“150M”

如果超过指定的内存量,您的应用将重新启动。人性化格式:可以是“10M”“100K”“2G”......

env

object

{“NODE_ENV”: “development”, “ID”: “42”}

env将出现在您的应用中的变量

env_

object

{“NODE_ENV”: “production”, “ID”: “89”}

注入 在做pm2时重启app.yml --env

source_map_support

boolean

true

默认为true[启用/禁用源映射文件]

instance_var

string

“NODE_APP_INSTANCE”

有一个NODE_APP_INSTANCE环境变量用于区分进程

日志文件

领域

类型

描述

log_date_format

(string)

“YYYY-MM-DD HH:mm Z”

日志日期格式

error_file

(string)

 

错误文件路径(默认为$ HOME / .pm2 / logs / XXXerr.log

out_file

(string)

 

输出文件路径(默认为$ HOME / .pm2 / logs / XXXout.log

combine_logs

boolean

true

如果设置为true,则避免使用进程ID后缀日志文件

merge_logs

boolean

true

combine_logs的别名

pid_file

(string)

 

pid文件路径(默认为$ HOME / .pm2 / pid / app-pm_id.pid

控制流

领域

类型

描述

min_uptime

(string)

 

启动应用程序的最小正常运行时间

listen_timeout

number

8000

如果应用没有监听,强制重新加载之前的时间以毫秒为单位

kill_timeout

number

1600

发送最后一个SIGKILL之前的时间(以毫秒为单位)

wait_ready

boolean

false

而不是重新加载等待listen事件,等待process.send'ready'

max_restarts

number

10

在您的应用程序被视为错误并停止重新启动之前连续不稳定重启次数(小于1秒间隔或通过min_uptime的自定义时间)your app is considered errored and stop being restarted

restart_delay

number

4000

在重新启动崩溃的应用程序之前等待的时间(以毫秒为单位)。默认为0

autorestart

boolean

false

默认为true。如果为false,如果应用程序崩溃或平稳结束,则PM2将不会重新启动您的应用程序

cron_restart

string

“1 0 * * *”

重新启动应用程序的cron模式。必须运行应用程序才能使cron功能正常运行

vizion

boolean

false

默认为true。如果为false,则PM2将在没有vizion功能的情况下启动(版本控制元数据)

post_update

list

[“npm install”, “echo launching the app”]

Keymetrics仪表板执行拉/升级操作后将执行的命令列表

force

boolean

true

默认为false。如果为true,则可以多次启动相同的脚本,这通常是PM2不允许的

部署

条目名称

类型

默认

描述

key

String

$HOME/.ssh

SSH密钥路径

user

String

 

SSH用户

host

[String]

 

SSH主机

ssh_options

String or [String]

 

没有命令行标志的SSH选项

ref

String

 

GIT远程/分支

repo

String

 

GIT 远程

path

String

 

服务器中的路径

pre-setup

String

 

预设置命令或本地计算机上脚本的路径

post-setup

String

 

安装后命令或主机上脚本的路径

pre-deploy-local

String

 

预部署行动

post-deploy

String

 

部署后行动

  • 16
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值