内部测试服务器是最近新装的,没有supervisorctl 这个程序管理工具。不过前一阵得知node应该用更加适配的工具进行管理,那就PM2。试用了一下非常强大,特此记录一下使用流程。非常使用用来做node 守护及相关管理。
npm install pm2 -g
全局安装pm2
您可以像这样启动任何应用程序(Node.js,Python,Ruby,$ PATH中的二进制文件…):
pm2 start app.js
pm2 start app.js --name app
简单守护
集成守护使用,在生产环境总可能没有安装pm2 我们可以使用
RUN npm install pm2 -g
CMD [ "pm2-runtime", "npm", "--", "start" ]
pm2 list
$ pm2 stop
$ pm2 restart
$ pm2 delete
比如启动express 可以在express根目录下
pm2 start bin/www
如果我们在后面加入watch参数,每当代码改变时即会自动重启,如下:
sudo pm2 start bin/www --watch
pm2 describe
该命令可以查看工程运行目录,node与你新高版本,日志目录,项目git位置等
要监控日志,自定义指标,应用程序信息:
pm2 monit
pm2 reload all
群集模式是启动Node.js应用程序时的一种特殊模式,它启动多个进程并在它们之间对HTTP / TCP / UDP进行负载均衡。**这提高了整体性能(16核机器上的x10倍)**和可靠性(在未处理错误的情况下更快的套接字重新平衡)。
以集群模式启动Node.js应用程序,该应用程序将利用所有可用的CPU:
pm2 start api.js -i
可以为’max’,-1(所有具有的cpu减1)或指定数量的实例开始。
如:sudo pm2 start bin/www -i max
监视从命令行直接启动的所有进程:
pm2 monit
配置文件官方文档:http://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/
the ecosystem file的目的是为所有应用程序收集所有选项和环境变量。
pm2 init
//初始化一个环境配置,它会输出一个config地址
您可以为多个环境声明变量。每个环境密钥必须具有以下格式:env_。
例如,app可以在两个环境中启动以下过程:development和production。
我们可以配置在不同环境下的特定参数,在express中 process.env.NODE_ENV即可传递进去
apps : [{
name: 'pm2 test',//app name 在pm2 管理中那个名字
script: './bin/www', //启动路径
instances: 1,//负载均衡实例数
autorestart: true,//是否自动重启
watch: [ //通过监视功能需要监视的文件夹
"bin",
"routers",
"controllers"
],
ignore_watch : [ //通过监视功能忽略某些文件或文件夹名称的正则表达式列表
"node_modules",
"logs",
"public"
],
watch_options: {
"followSymlinks": false
},
max_memory_restart: '1G',
output: './logs/pm2_out.log',//console.log 输出位置
error: './logs/pm2_error.log',//console.error 输出位置
log_date_format: "YYYY-MM-DD HH:mm Z",//log前面加上时间戳
merge_logs: true,//多实例情况下合并log
env: {//环境变量配置
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}],
pm2 start ecosystem.config.js
//这里我们使用配置文件的方式代替 pm2 start 方式启动
pm2 logs 查看控制台相应输出(实时日志)
$ pm2 logs APP-NAME # 显示APP-NAME日志
$ PM2 logs --json # JSON输出
$ PM2 logs --format # 格式化输出
$ pm2 flush # 刷新所有日志(清空)
$ pm2 reloadLogs # 重新加载所有日志
您可以为日志指定自定义位置。
module.exports = {
apps: [{
name: 'app',
script: 'app.js',
output: './out.log',
error: './error.log',
log: './combined.outerr.log',
}]
}
output 只是标准输出(console.log)
error 只是错误输出(console.error)
log结合output并error,默认情况下禁用
pm2 install pm2-logrotate
在群集模式下,每个群集都有自己的日志文件。您可以使用合并选项将所有日志收集到单个文件中:
module.exports = {
apps: [{
name: 'app',
script: 'app.js',
output: './out.log',
error: './error.log',
merge_logs: true,
log_date_format: "DD-MM-YYYY"
}]
}
解决最近核心矛盾
1 保存当前管理应用程序状态
pm2 save
2 生成自启动脚本
pm2 startup
pm2 startup ubuntu //你的操作系统
要获取计算机的自动配置启动脚本
此命令的输出可以是复制/粘贴行的建议,其中包含为您配置的所有环境变量和选项。
3 您只需复制/粘贴 PM2为您提供的行,并为您的操作系统配置启动脚本即可。
4 禁用自启动
pm2 unstartup
您只需复制/粘贴 PM2为您提供的行,并为您的操作系统配置启动脚本即可。
http://pm2.keymetrics.io/docs/usage/deployment/#simple-deploy
https://www.cnblogs.com/chyingp/p/pm2-documentation.html
官方文档:
https://www.npmjs.com/package/pm2
https://pm2.io/doc/en/runtime/guide/process-management/?utm_source=github