zhuangzi 2019-07-01
原始社会的我们开发node服务端程序一般过程:
node app.js;或者写入script使用npm运行;打开浏览器访问;node app.js->再次运行;node app.js->再次运行;node app.js->再次运行;nodemon;安装使用nodemon app.js;哇,可以自动监听文件修改变化自动重启,但是关闭控制台服务还是会被摧毁。再来看看使用pm2可拥有的能力:
启动服务pm2 start <script_file|config_file> [options] 启动指定应用
pm2 start app.js //启动app.js应用 pm2 start app.js --name app //启动应用并设置name pm2 start app.sh //脚本启动 pm2 start app.js --watch //监听模式启动,当文件发生变化,自动重启 //max 表示PM2将自动检测可用CPU的数量并运行尽可能多的进程 //max可以自定义,如果是4核CPU,设置为2则占用2个 pm2 start app.js -i max //启用群集模式(自动负载均衡) pm2-dev start ... // 开发模式启动,即不启用后台运行
pm2 list显示应用程序详细信息pm2 show <appName> [options] 显示指定应用详情
pm2 show [Name] //根据name查看 pm2 show [ID] //根据id查看
停止指定应用pm2 stop <appName> [options] 停止指定应用
pm2 stop all //停止所有应用 pm2 stop [AppName] //根据应用名停止指定应用 pm2 stop [ID] //根据应用id停止指定应用
重启应用pm2 reload|restart <appName> [options] 重启指定应用
pm2 restart app.js //同时杀死并重启所有进程,短时间内服务不可用,生成环境慎用 pm2 reload app.js //重新启动所有进程,0秒重启,始终保持至少一个进程在运行 pm2 gracefulReload all //以群集模式重新加载所有应用程序
pm2 serve ./dist 8080将目录dist作为静态服务器根目录,端口为8080删除应用pm2 delete <appName> [options] 删除指定应用;如果修改了应用配置行为,需要先删除应用,重新启动后方才会生效,如修改脚本入口文件;
pm2 delete all //关闭并删除应用 pm2 delete [AppName] //根据应用名关闭并删除应用 pm2 delete [ID] //根据应用ID关闭并删除应用
pm2 kill 杀掉pm2管理的所有进程;pm2 logs <appName> 查看指定应用的日志,即标准输出和标准错误
pm2 logs //查看所有应用日志 pm2 logs [Name] //根据指定应用名查看应用日志 pm2 logs [ID] //根据指定应用ID查看应用日志
pm2 monit 监控各个应用进程cpu和memory使用情况;命令生产默认示例配置文件pm2 ecosystem或pm2 init,运行默认会生成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' //启动默认模式
},
env_production : {
NODE_ENV: 'production' //使用production模式 pm2 start ecosystem.config.js --env production
},
instances:"max", //将应用程序分布在所有CPU核心上,可以是整数或负数
instance_var: "INSTANCE_ID",
exec_mode: "cluster",
watch:[
"server",
], //监听模式,不能单纯的设置为true,易导致无限重启,因为日志文件在变化,需要排除对其的监听
merge_logs: true, //集群情况下,可以合并日志
}
],
deploy: {
production : {
user: 'node', //ssh 用户
host: '212.83.163.1', //ssh 地址
ref: 'origin/master', //GIT远程/分支
repo: '[email protected]:repo.git', //git地址
path: '/var/www/production', //服务器文件路径
"post-deploy": 'npm install && pm2 reload ecosystem.config.js --env production' //部署后的动作
}
}
};processes.json;启动pm2 start processes.json{
"apps": [{
"name": "app", //名称
"script": "./", //程序入口
"cwd": "./", //根目录
"watch":[
"views"
],//需要监控的目录
"error_file":"./logs/err.log",//错误输出日志
"out_file":"./logs/out.log", //日志
"log_date_format":"YYYY-MM-DD HH:mm Z" //日期格式
}]
}1. apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用
2. name:应用程序名称"app"
3. cwd:应用程序所在的目录"./"
4. script:应用程序的脚本路径"./"
5. log_date_format: 日志文件名输出日期格式"YYYY-MM-DD HH:mm Z"
6. error_file:自定义应用程序的错误日志文件"./logs/app-err.log",
7. out_file:自定义应用程序日志文件"./logs/app-out.log"
8. instances: 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max
9. min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
10. max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)
11. cron_restart:定时启动,解决重启能解决的问题
12. watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。
13. "ignore_watch": [ // 不用监听的文件
"node_modules",
"logs"
],
13. merge_logs:// 设置追加日志而不是新建日志
14. exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs
15. exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork
16. 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' //使用production模式 pm2 start ecosystem.config.js --env production
},pm2-intercom进程间通信模块在log4js的配置文件logger.js里添加如下命令:
pm2: true, pm2InstanceVar: 'INSTANCE_ID'
"instance_var": "INSTANCE_ID", // 添加这一行 字段"exec_mode": "cluster",也会记录不到;往期经典好文: