1.什么是pm2?是一款可用于生产环境的Nodejs进程管理工具,内置负载均衡器。不仅保证了服务不中断,永远在线,还提供了0秒重载功能,以及其他一系列的进程管理和监控功能。而且使用起来非常简单。那么,最好的用途就是监控我们生产环境中node程序的运行状态,这样可以让我们日复一日的工作。pm2官方文档2、原始社会为什么要用pm2?开发node服务器程序的一般流程:写一个node程序app.js,运行nodeapp.js;或编写脚本以使用npm运行;打开浏览器访问;好像需要修改内容,但是浏览器不显示修改后的内容?->nodeapp.js->再次运行;浏览器突然无法访问服务,好像哪里出错了?重启->nodeapp.js->再次运行;糟糕,我打开了很多控制台窗口,不小心关闭了,服务已经不能访问了,继续打开控制台->nodeapp.js->再次运行;它崩溃了!好像有个工具nodemon;安装和使用nodemonapp.js;wow,可以自动监听文件修改变化并自动重启,但是console服务关闭时还是会被销毁。通过这个很常见的场景,我们了解到,要避免这些麻烦,一台服务器至少需要具备两种能力:后台运行和自动重启。我们来看看pm2可以具备的能力:日志管理;两种日志,pm2系统日志和托管进程日志,默认会将进程的控制台输出记录到日志中;负载均衡:PM2可以通过创建多个子进程来扩展您的应用程序来共享同一个服务器端口,这样做还允许应用程序以零秒停机时间重新启动。终端监控:可以在终端监控应用程序并检查应用程序健康状况(CPU使用率、内存使用率、请求/分钟等)。SSHDeployment:自动部署,避免所有服务器都ssh。静态服务:支持静态服务器功能,支持开发调试模式,非后台运行,pm2-devstart;。....太强大了!pm2启动服务常用命令pm2start[options]启动指定应用pm2startapp.js//启动app.js应用pm2startapp.js--nameapp//启动应用并设置namepm2startapp.sh//脚本启动pm2startapp.js--watch//监控模式启动,当文件发生变化时,会自动重启//max表示pm2会自动检测可用CPU数量,并运行尽可能多的进程possible//max可以自定义,如果是4核CPU,如果设置为2,会占用2个pm2startapp.js-imax//开启集群模式(自动负载均衡)pm2-devstart...//以开发模式启动,即不开启后台运行查看启动列表pm2list显示应用详情pm2show[options]显示指定应用详情pm2show[Name]//查看pm2show[ID]]bynameViewstopspecifiedapplicationbyidpm2stop[options]停止指定应用pm2stopall//停止所有应用pm2stop[AppName]//根据应用名称停止指定应用pm2stop[ID]//根据应用id停止指定应用并重启应用pm2reload|restart[options]重启指定应用pm2restartapp.js//同时杀死并重启所有进程,服务不可用短时间,生成环境慎用pm2reloadapp.js//重启所有进程,0秒重启,始终保持至少一个进程正在运行pm2gracefulReloadall//以集群模式重新加载所有应用startstaticserverpm2serve./dist8080使用目录dist作为静态服务器根目录,端口为8080deleteapplicationpm2delete[options]删除指定的应用;如果修改应用配置行为,需要先删除应用,重启后才会生效,比如修改脚本入口文件;pm2deleteall//关闭并删除应用pm2delete[AppName]//根据应用名关闭并删除应用pm2delete[ID]//根据应用ID关闭并删除应用pm2killkillallprocessesmanaged下午2点之前;pm2logs查看指定应用的日志,即标准输出和标准错误pm2logs//查看所有应用日志pm2logs[Name]//根据指定应用名称查看应用日志pm2logs[ID]//根据指定的应用ID查看应用日志pm2monit监控各个应用进程的cpu和内存使用情况;pm2配置模式命令生成默认示例配置文件pm2ecosystem或pm2init,运行生成ecosystem.config.js配置文件module.exports={apps:[{name:'back-Api',//应用名称script:'./server/start.js',//应用文件位置env:{PM2_SERVE_PATH:"./apidoc",//静态服务路径PM2_SERVE_PORT:8080,//静态服务器访问端口NODE_ENV:'development'//Startdefaultmode},env_production:{NODE_ENV:'production'//使用生产模式pm2startecosystem.config.js--envproduction},instances:"max",//将应用分布在所有CPU核心上,可以是整数或负instance_var:"INSTANCE_ID",exec_mode:"clustre",watch:["server",],//监控模式不能简单设置为true,容易导致无限重启,因为日志文件是变化的,需要排除监控merge_logs:true,//在集群的情况下,可以合并日志}],deploy:{production:{user:'node',//sshuserhost:'212.83.163.1',//sshaddressref:'origin/master',//GITremote/branchrepo:'git@github.com:repo.git',//git地址路径:'/var/www/production',//服务器文件路径"post-deploy":'npminstall&&pm2reloadecosystem.config.js--envproduction'//部署后的动作}}};自定义json配置文件如:processes.json;startpm2startprocesses.json{"apps":[{"name":"app",//name"script":"./",//程序入口"cwd":"./",//根目录"watch":["views"],//目录monitored"error_file":"./logs/err.log",//错误输出日志"out_file":"./logs/out.log",//log"log_date_format":"YYYY-MM-DDHH:mmZ"//dateformat}]}pm2常用配置项分析1.apps:json结构,apps是一个数组,每个数组成员对应一个运行在pm2中的应用2.name:应用名称"app"3.cwd:应用所在目录"./"4.script:应用程序的脚本路径"./"5.log_date_format:日志文件名输出日期格式“YYYY-MM-DDHH:mmZ”6。error_file:自定义应用程序错误日志文件“./logs/app-err.log”,7。out_file:自定义应用日志文件“./logs/app-out.log”8.instances:应用启动实例数,仅在集群模式下有效,默认为fork;或最大9。min_uptime:最小运行时间,这里设置的是60s,即如果应用在60s内退出,pm2会认为程序异常退出,然后触发重启。:定时启动,解决重启即可解决的问题12.watch:是否开启监听模式,默认为false,如果设置为true,当应用发生变化时,pm2会自动重新加载。在这里您还可以设置要监控的文件。13."ignore_watch":[//filesnottobemonitored"node_modules","logs"],13.merge_logs://setadditionallogsinsteadofnewlogs14.exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs15。exec_mode:应用启动模式,这里设置的是cluster_mode(集群),默认是fork16。autorestart:启用/禁用应用程序崩溃或退出时自动重启,默认为true,出现异常时自动重启17.vizion:启用/禁用vizion特性(版本控制)18."args":"",//参数传递给脚本19.env:{PM2_SERVE_PATH:"./apidoc",//静态服务路径PM2_SERVE_PORT:8080,//静态服务器访问端口NODE_ENV:'development'//启动默认模式},20.env_production:{NODE_ENV:'production'//使用生产模式pm2startecosystem.config.js--envproduction},pm2配合log4js处理日志pm2启动时,通常会发现log4js无法记录日志信息;解决办法是安装pm2的pm2-intercom进程间通信模块,在log4js配置文件logger.js中添加如下命令:pm2:true,pm2InstanceVar:'INSTANCE_ID'在pm2中添加"instance_var":"INSTANCE_ID"configurationfile,//在字段中加入这一行,发现如果没有设置集群模式"exec_mode":"cluster",则不会被记录;其他log4js日志配置使用详解Koa日志中间件包开发(log4js)《积步成行,行万里路》——持续更新中~,喜欢就点赞关注吧!往期经典好文:浅谈团队协作必备的Git操作s前端模块化规范