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 // 启动用户名
本文介绍了PM2,一个Node.js进程管理器,它支持快速启动应用、监控文件变化、管理应用实例、日志管理以及环境部署,包括自动重启、环境切换等功能。
430

被折叠的 条评论
为什么被折叠?



