pm2基本使用
Posted 不知名架构师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pm2基本使用相关的知识,希望对你有一定的参考价值。
1.pm2的基本介绍
pm2是node的进程管理器,利用它可以简化node任务的管理,且内置了许多功能,常用于后台脚本管理。
pm2特性
- 自带热部署 - - - 当源文件更新 线上项目也会自动重启
- 后台运行 - - - 不会占用实时窗口 会在后台运行
- 服务信息查看 - - - 查看运行中程序的各项信息
- 日志系统 - - - 可以随时查看程序的运行日志
- 内置负载均衡 - - - 在cluster模式会自动使用轮询的方式达到负载均衡的效果
- 多平台支持 - - - 在linux windows macOS 上都可以稳定的运行
- 最大内存重启 - - - 可以设置最大内存限制超过限制则会自动重启;
还有很多的特性 咱就不一一举例了感兴趣的朋友可以去官网查看学习 小的这就献上官网地址 官网地址
2.pm2的安装
// 这里我使用npm进行pm2的全局安装
$ npm install -g pm2
// 安装完成后可以使用 -v 参数 查看pm2的版本 检测是否安装成功
$ pm2 -v
3.pm2的基本使用
// 第一条要介绍的是pm2的启动命令
$ pm2 start [项目入口文件名]
这里我使用一个 node.js内置的http模块搭建的一个简单服务器程序来演示
// serve.js
var http = require("http")
//创建服务器
http.createServer((req, res) =>
res.writeHead(200, "Content-Type": "text/html;charset=utf-8" ) //设置响应头
res.write(`
<html>
<div>hello pm2</div>
</html>
`)
res.end()
).listen(3000, () =>
console.log("server start")
)
在项目根路径打开cmd运行下面的命令
// 使用npm2启动这个简单的服务器程序
$ pm2 start serve.js
// 也可以在后面添加一些参数 来附加一些效果
--watch // --watch 监听程序源文件的变化 一旦发生变化自动重启 (热启动效果)
--ignore-watch // 排除监听的目录或者文件 支持正则表达式
-n --name // 设置程序的名称
--log // 指定日志文件
--max-memory-restart [100MB] // 设置最大占用内存
--no-daemon // 非进程守护模式启动
--no-autorestart // 关闭自动重启
--time // 日志添加时间前缀
-e --error [path] // 错误日志输出路径
-i [n] //cluster mode 模式启动n个进程实例
-i max //集群模式 将会检测cpu的数量并运行尽可能多的进程 自动开启负载均衡的效果
// 还有很多参数可以使用 详细可以查看官网 这些也可以通过pm2配置文件配置
可以看到命令行输出了以下信息 这是这个简单服务器程序的一些基础运行信息,这时即使关闭终端,这个程序仍然会在后套继续运行
各项参数详解
id // 进程id 标识作用 用于其他命令的指向
name // 进程标识 用于其他命令的指向
namespace // 环境名称
version // 版本
mode //进程模式,cluster或fork。cluster有多个进程,而fork只有一个
pid // 进程id 标识作用
uptime // 运行时间
↺ // 重启次数
status // 进程是否在线
cpu // cpu的占用率
mem // 内存占用大小
user // 启动用户名
可以启动多个这样的任务 可以通过以下命令查看所有的运行程序信息
// 查看所有使用pm2运行的程序信息
$ pm2 list
4.pm2常用命令
1.停止进程
// 停止指定的进程
$ pm2 stop [进程名] | [进程id]
// 停止所有的进程
$ pm2 stop all # 停止所有的应用程序
2.删除进程
// 删除指定的进程
$ pm2 delete [进程名] | [进程id]
// 删除所有进程
$ pm2 delete all
// 杀死pm2的守护进程 同时也会杀死所有进程
$ pm2 kill
3.重启进程
// 以下两个命令都可以达到重启进程的效果
$ pm2 restart [进程名] | [进程id] // 重启效果 短时间内进程无效
$ pm2 reload [进程名] | [进程id] // 重载效果 会保持进程在线
// 重启所有进程
$ pm2 reload all
// 重置重启数量
$ pm2 reset [进程名]
4.查看所有进程
// 以下三个命令都可以查看所有进程
$ pm2 list
$ pm2 ls
$ pm2 status
5.查看某一个进程的信息
$ pm2 show [进程名] | [进程id]
6.查看日志
// 查看所有的日志
$ pm2 logs
// 查看指定的进程日志
$ pm2 logs [进程名] | [进程id]
// 清空所有日志
$ pm2 flush
// 还可以附加一些参数 附加功能
--line [数字] // 查看最后多少条日志 默认是15条
--err // 只查看错误日志
--timestamp // 时实日志附带时间前缀
6.监控所有的进程
// 会进入一个信息面板
$ pm2 monit
7.静态服务器
$ pm2 serve [静态文件夹路径] [端口]
8.扩展实例
// 将指定的进程扩展到n个
$ pm2 scale [服务名] [n]
5.pm2配置文件
$ pm2 ecosystem // 当前目录下自动生成pm2的配置文件
// 以配置文件启动
$ pm2 start ecosystem.config.js --env production
apps是一个数组 可以同时配置多个进程服务 还有很多的配置项 如果想要了解的更详细还请参照官网
同时日志文件还支持 yml 格式配置 小编这里就不多演示了 详情请参照官网
// ecosystem.config.js 配置演示
module.exports =
apps : [
name : 'demo', // 应用的名称
script : 'app.js', // 应用文件路径
env:
PM2_SERVE_PATH: ".", // 静态服务的路径
PM2_SERVE_PORT: 8080, // 静态服务器访问的端口
NODE_ENV: 'development' // 设置开发环境运行时
,
env_production :
NODE_ENV: 'production' // 设置生产环境运行时
,
instances: "max", // 将应用程序分布在所有CPU核心上 也可以指定多少个
watch: true, // 热启动模式
output: './out.log', // 指定日志标准输出文件及位置
error: './error.log', // 错误输出日志文件及位置
merge_logs: true, // 是否可以合并日志
log_type: "json", // 日志类型
log_date_format: "DD-MM-YYYY", // 日志的日期格式
],
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': ''
6.结尾
这是小编的第二篇博客,励志每周更新一篇,感觉写到这里还有很多pm2的技术点没有写出来,后面可能还会更新一篇关于pm2的博客,专门讲解一下 pm2的一些插件 还有 keymetrics监控 和fork与cluster这两种启动模式,想听的朋友不妨点个关注或者订阅吧,哈哈哈,瑞思拜!
node程序的部署神器pm2的基本使用
pm2是从nodejs衍生出来的服务器进程管理工具,可以做到开机就启动nodejs。当然了,也可以用nohup来做这件事情的。
前言
众所周知,Node.js运行在Chrome的JavaScript运行时平台上,我们把该平台优雅地称之为V8引擎。不论是V8引擎,还是之后的Node.js,都是以单线程的方式运行的,因此,在多核心处理器的系统中并不能发挥其最大的性能。
Node.js的cluster模块
幸运的是,Node.js给我们提供了cluster模块,它可以生成多个工作线程来共享同一个TCP连接。
它是如何运作的呢?
首先,Cluster会创建一个master,然后根据你指定的数量复制出多个server app(也被称之为工作线程)。它通过IPC通道与工作线程之间进行通信,并使用内置的负载均衡来更好地处理线程之间的压力,该负载均衡使用了Round-robin算法(也被称之为循环算法)。
当使用Round-robin调度策略时,master accepts()所有传入的连接请求,然后将相应的TCP请求处理发送给选中的工作线程(该方式仍然通过IPC来进行通信)。
用PM2的方式
PM2内置的cluster功能,内部包含了所有上述的处理逻辑,因此你不必对代码做任何修改。Cluster模块的功能非常强大,使用PM2会使它变得更加容易。
把pm2加入开机启动
一般来说,pm2 startup即可,会根据当前系统自动识别加入开机启动项的方式。因为不同系统的情况下,开机启动项的加载方式是不一样的。当然,你也可以指定一下当前系统的类型。具体可以参考相关文档。
想要PM2在服务器重启后自动运行之前的应用,可以先通过pm2 start启动你的应用,然后执行下面的命令:
pm2 save
这将在~/.pm2目录下生成一个dump.pm2文件,里面描述了当前PM2上运行着的所有应用。然后执行命令:
pm2 startup [platform]
注意有必要添加可选参数platform以明确告知pm2当前的系统环境。这样,下次当服务器重启时,PM2会自动运行之前保存的应用。
当然,这里也可以指定startup的启动用户,例如:
pm2 startup -u sunan
这样指定的话,pm2的启动身份,就是sunan,而不是root了。
非常遗憾的是Windows对pm2 支持不够友好,startup 的方式在 Windows 系统下并不支持,官方的文档:
我们可以用Windows自带的启动 ,比如把启动这个程序的命令放进bat脚本。
- 在cmd中输入“gpedit.msc”,打开“组策略”窗口。
- 依次“计算机配置→Windows设置→脚本(启动/关机)”节点。
- 双击右侧详细资料窗格中的“启动”项目,单击“添加”按钮。
- 将你所写的bat脚本添加为新的计算机启动脚本。
启动任务
cd到对应目录后,使用pm2 start命令启动对应js,并保存。
pm2 start <js文件相对路径>
pm2 start <json的任务描述文件相对路径>
pm2 start server/app.js
pm2 start server/app.json
上面的命令,需要您根据实际情况任选一条。
pm2 save
pm2 start 这个命令是重点,整个部署的核心所在。再说一下pm2 start的几种变形,常规上来说,一般跟的是js的文件路径,或者是个json描述文件,甚至是个sh文件。
pm2 save的这个命令实际上会把当前pm2 start的情况写入到配置文件中。
查看所有pm2任务及删除pm2任务
pm2 list
pm2 delete <task name>
如下图:
上述操作完成后,你如果再次重新启动服务器的话,就会发现,你的nodejs网站已经自动为你启动完成了。
以上是关于pm2基本使用的主要内容,如果未能解决你的问题,请参考以下文章