先说一些废话
之前学习 Nodejs
我的项目的时候应用了 pm2
作为生产环境的过程管理工具,最近服务器崩了须要重启一些服务,发现有些命令记得不是特地分明,
所以这里写一篇文章帮忙本人记忆整顿一下 pm2
的常用命令,后续有须要查阅一下即可~
常用命令
- 进入 bin 目录启动:
pm2 start www
/pm2 start app.js
pm2 start app.js --name="fx67ll"
启动并命名为 fx67ll,没有命名的话后续能够用 id 代替 namepm2 start app.js --watch
当文件变动时主动重启利用pm2 start script.sh
启动 bash 脚本pm2 list
查看所有启动的利用列表pm2 monit
显示每个应用程序的 CPU 和内存占用状况pm2 show [app-id/app-name]
显示指定应用程序的所有信息pm2 log
显示应用程序的日志信息pm2 log [app-id/app-name]
显示指定应用程序的日志信息pm2 flush
清空所有日志文件pm2 stop all
进行所有应用程序pm2 stop [app-id/app-name]
进行指定应用程序pm2 restart all
重启所有应用程序pm2 restart [app-id/app-name]
重启指定应用程序pm2 delete all
敞开并删除所有应用程序pm2 delete [app-id/app-name]
删除指定的应用程序pm2 reset [app-id/app-name]
重置重启数量pm2 startup
创立开机自启动命令pm2 save
保留以后利用列表pm2 resurrect
从新加载保留的利用列表pm2 update
保留过程,杀死并重启过程,个别用于更新 pm2 版本pm2 ecosystem
生成一个示例 json 配置文件- 更多命令 能够参考 pm2 官网文档
应用平衡负载模式 (cluster mode) 的相干命令
pm2 start app.js -i n
平衡负载模式 (cluster mode) 启动 n 个 app.js 利用实例pm2 reload all
重启平衡负载模式 (cluster mode) 下的所有利用pm2 gracefulReload all
Graceful reload all apps in cluster modepm2 scale [app-id/app-name] 10
将指定的应用程序拓展到 10 个实例
0 秒停机从新加载(集群模式下,能够达到重启时不进行服务)
pm2 reload app.js
重新启动所有过程,始终保持至多一个过程在运行pm2 gracefulReload all
优雅地以集群模式从新加载所有应用程序
pm2 配置文件
生成示例配置文件
// 生成一个示例 json 配置文件
pm2 ecosystem
// pm2 初始化
pm2 init
配置项
-
根底类
name
:过程名script
:node 启动文件的门路cwd
:我的项目所在的目录args
:通过命令行传递给 node 启动文件的参数interpreter
:编译器的绝对路径(默认 node)interpreter_args
:传给编译器的参数node_args
:传给 node 的参数
-
进阶类
instances
:过程数exec_mode
:过程的模式(cluster 或 fork)- PS: cluster 模式利用 node 的 child_process 模块孵化多个子过程,主过程监听端口,子过程只和主过程通信,从而达到单个端口多个过程;通过轮转形式实现负载平衡
watch
:布尔值或文件数组,容许开启监听文件改变重启ignore_watch
:不监听的文件max_memory_restart
:超过该内存就主动重启env
:利用中的默认环境变量env_
:命令行中可传入的环境变量,笼罩默认环境变量source_map_support
:默认 true,反对 sourcemap 文件
-
日志类
log_date_format
:日志工夫格局error_file
:谬误日志寄存门路out_file
:全副日志寄存门路combine_logs
:是否将不同 id 的过程日志合并merge_logs
:同上
-
控制流
min_uptime
:pm2 认为过程在线的最小时长listen_timeout
:如果 app 没有发送 ready 信号,距离多长时间 reloadkill_timeout
:从通知过程要敞开到强制敞开过程的间隔时间wait_ready
:是否期待过程发送 ready 信号max_restarts
:最大不稳固重启次数(不稳固指的是小于 1s 或者小于的min_uptime
重启)restart_delay
:过程掉线后,期待多长时间重启autorestart
:是否开启主动重启
配置项实际中须要留神的内容
script
:若应用 cluster 模式,必须是启动文件入口,不可通过 npm 启动max_restarts
:指不稳固重启,即小于 1s 或min_uptime
的重启,要联合min_uptime
配置才起效listen_timeout
:当 cluster 模式时,这个值要大于一个过程启动所需工夫,否则 reload 时会造成短暂的服务不可用
配置文件示例
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 : 'git@github.com:repo.git', //git 地址
path : '/var/www/production', // 服务器文件门路
post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production' // 部署后的动作
}
}
};
配置启动命令(package.json)
# pm2-server 工程的环境变量,目标是辨别各个环境的利用启动门路
# cross-env NODE_ENV=development
# pm2 的启动命令
# pm2 start pm2-conf/ecosystem.config.js
# 传递给 pm2 的参数,-- only <name>,--env <env name>
# --only detective --env test
cross-env NODE_ENV=development pm2 start pm2-conf/ecosystem.config.js --only detective --env test
对于 pm2
pm2 是什么
pm2(Process Manager 2)是具备内置负载均衡器的 Node.js 应用程序的生产运行时和过程管理器。
它容许您永恒放弃应用程序沉闷,无需停机即可从新加载它们,并促成常见的 Devops 工作。
pm2 个性
- 后盾运行:一般启动形式:
node index.js
敞开终端就完结过程,pm2
能够后盾运行,终端敞开不影响 - 日志治理:应用程序日志保留在服务器的硬盘中
~/.pm2/logs/
- 负载平衡:
pm2
能够通过创立共享同一服务器端口的多个子过程来扩大您的应用程序,这样做还容许您以零秒停机工夫重新启动应用程序 - 终端监控:提供实时的接口,能够在终端中监控您的应用程序并查看应用程序运行状况(CPU 使用率,应用的内存,申请 / 分钟等)
- SSH 部署:主动部署,防止一一在所有服务器中进行
ssh
- 动态服务:反对动态服务器性能
- 多平台反对:实用于
Linux
(稳固)和macOS
(稳固)和Windows
(稳固) - 集成治理:对于多个过程,不同环境,能够对立配置,方便管理
pm2 装置
应用 npm 命令 npm install pm2
即可,配置项参考 npm 的形式
附录
参考资料
- 参考教程 ———— pm2 官网教程
- 参考文档 ———— PM2 常用命令
- 参考文档 ———— pm2 介绍及使用手册
- 参考文档 ———— pm2 入坑详解
我是 fx67ll.com,如果您发现本文有什么谬误,欢送在评论区探讨斧正,感谢您的浏览!
如果您喜爱这篇文章,欢送拜访我的 本文 github 仓库地址,为我点一颗 Star,Thanks~ :)
转发请注明参考文章地址,非常感谢!!!