pm2:node进程管理工具(pm2部署node项目)
wxin55 2024-10-25 18:06 10 浏览 0 评论
https://pm2.keymetrics.io/docs/usage/quick-start/
- pm2 -version 查看版本
- pm2 start app.js --name name 启动并命名为name,没有命名的话后续可以用id替代name
pm2 start app.js --name name运行自己顶名称的进程
pm2 start app.js --watch 当文件变化时自动重启应用
pm2 start yarn -- run 运行yarn命令,-- 后是相关scripts;也可以使用npm
- 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 start ecosystem.config.js --env production
- 基础类
- 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信号,间隔多长时间reload
- kill_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是一个json结构的数组 ,每一个数组成员对应一个pm2中运行的应用
apps : [
{
// 应用程序名称
name: 'nuxt-snow',
// 执行文件
script: 'index.js',
// 应用程序所在的目录
cwd: './',
// 传递给脚本的参数
args: '',
// 指定的脚本解释器
interpreter: '',
// 传递给解释器的参数
interpreter_args: '',
// 是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。
watch: true, // watch: './',
// 不用监听的文件
ignore_watch: [
'node_modules',
'logs'
],
// 应用程序启动模式,这里设置的是 cluster_mode(集群),默认是fork
exec_mode: 'fork',
// 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max
instances: 1,
// 最大内存限制数,超出自动重启
max_memory_restart: 8,
// 自定义应用程序的错误日志文件(错误日志文件)
error_file: './logs/app-err.log',
// 自定义应用程序日志文件(正常日志文件)
out_file: './logs/app-out.log',
// 设置追加日志而不是新建日志
merge_logs: true,
// 指定日志文件的时间格式
log_date_format: 'YYYY-MM-DD HH:mm:ss',
// 最小运行时间,这里设置的是60s即如果应用程序在* 60s内退出,pm2会认为程序异常退出,此时触发重启 max_restarts设置数量,应用运行少于时间被认为是异常启动
min_uptime: '60s',
// 设置应用程序异常退出重启的次数,默认15次(从0开始计数),最大异常重启次数,即小于min_uptime运行时间重启次数;
max_restarts: 10,
// 启用/禁用应用程序崩溃或退出时自动重启,默认为true, 发生异常的情况下自动重启
autorestart: true,
// 定时启动,解决重启能解决的问题,crontab时间格式重启应用,目前只支持cluster模式;
cron_restart: '',
// 异常重启情况下,延时重启时间
restart_delay: '60s',
// 环境配置
// env: {
// // 公共变量
// COMMON_VARIABLE: true
// },
// 生产环境配置
// $ pm2 start app.js --env
env: {
// 环境参数,当前指定为生产环境 process.env.NODE_ENV
NODE_ENV: 'production',
// 当前环境接口地址,如果不用可不配置 process.env.REMOTE_ADDR
REMOTE_ADDR: 'http://www.abc.com/'
},
// 开发环境配置
// $ pm2 start app.js --env_dev
env_dev: {
// 环境参数,当前指定为开发环境 process.env.NODE_ENV
NODE_ENV: 'development',
// 当前环境接口地址,如果不用可不配置 process.env.REMOTE_ADDR
REMOTE_ADDR: 'http://www.abc.com/'
},
// 测试环境配置
// $ pm2 start app.js --env_test
env_test: {
// 环境参数,当前指定为测试环境 process.env.NODE_ENV
NODE_ENV: 'test',
// 当前环境接口地址,如果不用可不配置 process.env.REMOTE_ADDR
REMOTE_ADDR: 'http://www.abc.com/'
}
}
],
// 环境部署
deploy : {
production : {
// ssh的用户名,登录远程服务器的用户名
user : 'snow',
// 要发布的机器,远程服务器的IP或hostname,此处可以是数组同步部署多个服务器
host : '10.0.0.0',
// 服务器端口
port : 3000,
// 要发布的代码分支,远端名称及分支名
ref : 'origin/master',
// 代码Git仓库地址
repo : 'git@gitlab.dzm.net:dzm/nuxt-test',
// 服务器存储代码地址,远程服务器部署目录,需要填写user具备写入权限的目录,也就是服务器存放上面git库代码的地方
path : '/usr/local/var/www/production',
// ssh权限配置
// 'ssh_options': 'StrictHostKeyChecking=no',
'ssh_options': ['StrictHostKeyChecking=no', 'PasswordAuthentication=no'],
// 1、在 setup 前触发,如安装 git
'pre-setup': '',
// 2、在 setup 后触发,如做一些其他配置
'post-setup': '',
// 3、在 deploy 前触发,执行本地脚本
'pre-deploy-local': '',
// 4、在 deploy 前触发,执行远程脚本
'pre-deploy': 'git fetch --all',
// 5、在 deploy 后触发,执行远程脚本,如 npm install,部署后需要执行的命令
// 'post-deploy' : 'npm install && pm2 startOrRestart ecosystem.config.js --env production',
'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production',
// 环境变量
'env' : {
// 指定为生成环境
'NODE_ENV': 'production'
}
}
}
};
- 进程相关字段说明
id // 进程id 标识作用 用于其他命令的指向
name // 进程标识 用于其他命令的指向
namespace // 环境名称
version // 版本
mode //进程模式,cluster或fork。cluster有多个进程,而fork只有一个
pid // 进程id 标识作用
uptime // 运行时间
? // 重启次数
status // 进程是否在线
cpu // cpu的占用率
mem // 内存占用大小
user // 启动用户名
相关推荐
- ES6中 Promise的使用场景?(es6promise用法例子)
-
一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...
- JavaScript 对 Promise 并发的处理方法
-
Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...
- Promise的九大方法(promise的实例方法)
-
1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...
- 360前端一面~面试题解析(360前端开发面试题)
-
1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...
- 前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?
-
Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...
- 最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式
-
看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...
- 前端分享-Promise可以中途取消啦(promise可以取消吗)
-
传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...
- 手写 Promise(手写输入法 中文)
-
前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...
- 什么是 Promise.allSettled()!新手老手都要会?
-
Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...
- 前端面试-关于Promise解析与高频面试题示范
-
Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...
- 宇宙厂:为什么前端离不开 Promise.withResolvers() ?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...
- Promise 新增了一个超实用的 API!
-
在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...
- 一次搞懂 Promise 异步处理(promise 异步顺序执行)
-
PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...
- Promise 核心机制详解(promise机制的实现原理)
-
一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...
- javascript——Promise(js实现promise)
-
1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- ES6中 Promise的使用场景?(es6promise用法例子)
- JavaScript 对 Promise 并发的处理方法
- Promise的九大方法(promise的实例方法)
- 360前端一面~面试题解析(360前端开发面试题)
- 前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?
- 最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式
- 前端分享-Promise可以中途取消啦(promise可以取消吗)
- 手写 Promise(手写输入法 中文)
- 什么是 Promise.allSettled()!新手老手都要会?
- 前端面试-关于Promise解析与高频面试题示范
- 标签列表
-
- hive行转列函数 (63)
- sourcemap文件是什么 (54)
- display none 隐藏后怎么显示 (56)
- 共享锁和排他锁的区别 (51)
- httpservletrequest 获取参数 (64)
- jstl包 (64)
- qsharedmemory (50)
- watch computed (53)
- java中switch (68)
- date.now (55)
- git-bash (56)
- 盒子垂直居中 (68)
- npm是什么命令 (62)
- python中+=代表什么 (70)
- fsimage (51)
- nginx break (61)
- mysql分区表的优缺点 (53)
- centos7切换到图形界面 (55)
- 前端深拷贝 (62)
- kmp模式匹配算法 (57)
- jsjson字符串转json对象 (53)
- jdbc connection (61)
- javascript字符串转换为数字 (54)
- mybatis 使用 (73)
- 安装mysql数据库 (55)