废话少说。在学习Nodejs项目的时候,我使用了pm2作为生产环境的进程管理工具。最近服务器挂了,需要重启一些服务。我发现自己有些命令记得不是很清楚,所以在这里写了一篇文章帮助自己记忆和整理一下pm2的常用命令,以后有需要的可以查一下。常用命令进入bin目录启动:pm2startwww/pm2startapp.jspm2startapp.js--name="fx67ll"启动并命名为fx67ll如果没有name,可以用id代替namepm2startapp.js--watch在文件更改时自动重启应用程序。pm2startscript.sh启动bash脚本pm2list以查看所有启动的应用程序列表。pm2monit显示各个应用的CPU和CPU内存使用情况pm2show[app-id/app-name]显示指定应用的所有信息pm2log显示应用的日志信息pm2log[app-id/app-name]显示指定应用的日志信息pm2flush清除所有日志文件pm2stopall停止所有应用pm2stop[app-id/app-name]停止指定应用pm2restartall重启所有应用pm2restart[app-id/app-name]restart指定应用pm2deleteall关闭并删除所有应用pm2delete[app-id/app-name]删除指定应用pm2reset[app-id/app-name]重新设置重启次数pm2startup创建开机自启动命令pm2save保存当前应用列表pm2resurrect重新加载保存的应用列表pm2update保存进程,杀掉并重启进程,一般用于更新pm2版本pm2生态生成示例json配置文件更多命令请使用负载均衡模式(集群模式)参考pm2官方文档相关命令pm2startapp.js-in负载均衡模式(集群模式)启动n个app.js应用实例pm2reloadall重启所有处于负载均衡模式的应用(集群模式)下午2gracefulReloadallGracefulreloadallappsinclustermodepm2scale[app-id/app-name]10将指定应用扩展到10个实例,0秒停止并重新加载(集群模式下,服务可以不停机重启)pm2reloadapp.js重启所有进程,始终保持至少一个进程运行pm2gracefulReloadallgracefulreloadallapplicationsinclustermodepm2configurationfilegeneratesampleconfigurationfile//generateasamplejsonconfigurationfilepm2ecosystem//pm2initializationpm2initconfigurationitembasicclassname:进程名script:节点启动文件的路径cwd:项目所在目录args:通过命令行传递给节点启动文件的参数interpreter:编译器的绝对路径(默认节点)interpreter_args:传递给编译器的参数node_args:传递给node的参数高级类实例:进程数exec_mode:进程模式(cluster或fork)PS:cluster模式使用node的child_process模块??孵化多个子进程,主进程监听端口,子进程只与主进程通信,从而实现单端口多进程;通过轮换实现负载均衡watch:布尔值或文件数组,允许开启监听文件变化并重启ignore_watch:未监听的文件max_memory_restart:内存超过限制自动重启env:application默认环境变量env_in:theenvironment命令行可以传入的变量,覆盖默认环境变量不同idmerge_logs:同上控制流min_uptime:pm2认为进程在线的最短时间listen_timeout:如果app没有发送ready信号,间隔多长时间reloadkill_timeout:告诉进程关闭的间隔toforcingtheprocesstoshutdownwait_ready:是否等待进程发送就绪信号max_restarts:最大不稳定重启次数(unstable是指小于1s或者小于min_uptime的重启)restart_delay:进程下线后等待多久重启autorestart:是否开启自动重启实践中需要注意的配置项script:如果使用集群模式时,必须是启动文件的入口,不能通过npm启动。max_restarts:指不稳定重启,即小于1s或min_uptime的重启,只有结合min_uptime配置才会生效。listen_timeout:当处于集群模式时,该值必须大于一个进程启动所需的时间,否则在重新加载配置文件时服务会暂时不可用示例module.exports={apps:[{name:'API',//applicationnamescript:'app.js',//应用文件位置env:{PM2_SERVE_PATH:".",//静态服务路径PM2_SERVE_PORT:8080,//静态服务器访问端口NODE_ENV:'development'//启动默认模式},env_production:{NODE_ENV:'production'//使用生产模式pm2startecosystem.config.js--envproduction},instances:"max",//将应用分布在所有CPU核心上,可以是整数或负值watch:true,//监控模式output:'./out.log',//指定日志标准输出文件和位置error:'./error.log',//错误输出日志文件和位置,pm2安装pm2-logrotate进行拆分日志文件merge_logs:true,//集群情况下,可以合并日志log_type:"json",//日志类型log_date_format:"DD-MM-YYYY",//日志日期记录格式}],deploy:{production:{user:'node',//sshuserhost:'212.83.163.1',//sshaddressref:'origin/master',//GITremote/branchrepo:'git@github.com:repo.git',//gitaddresspath:'/var/www/production',//服务器文件路径post-deploy:'npminstall&&pm2reloadecosystem.config.js--envproduction'//部署后的动作}}};配置启动命令(package.json)#pm2-server项目的环境变量,目的是区分各个环境的应用启动路径#cross-envNODE_ENV=development#pm2启动命令#pm2startpm2-conf/ecosystem.config.js#传递给pm2的参数,--only
