title: 组长,为啥我的node项目关闭命令行窗口就不能访问了
category: Web
tag: pm2
date: 2019-07-08
主标题:组长,为啥我的node项目关闭命令行窗口就不能访问了
副标题:pm2笔记
概念
pm2是守护进程的管理器,可以稳定运行 node python sh 等程序。相比直接运行node app.js
,pm2可以后台运行,有问题记录和自动重启功能,更适合生产环境使用。
使用
安装
npm i -g pm2
快速使用
pm2 start app.js
pm2 start a.sh
pm2 start a.py
pm2 [list|ls|status] 查看状态
pm2 logs 日志
pm2 monit 实时仪表
pm2 restart app
pm2 reload app
pm2 stop app
pm2 delte apppm2 startup
pm2 startup 开机自启
# 自动重启
pm2 start a.js --watch --ignore-watch="node_modules"
集群模式,自动负载均衡 pm2 start app.js -i max
也可以使用 ecosystem
配置多个应用程序
参数
可以在cli中产地一些参数:
# 指定一个app名字
--name <app_name>
# 监听文件变化并自动重启
--watch
# 设置内存最大限度,超出重启
--max-memory-restart <200MB>
# 设定日志文件
--log <log_path>
# 给脚本传递额外参数
-- arg1 arg2
# 自动重启间隔
--restart-delay <dealy in ms>
# 日志前缀带时间
--time
# 不自动启动app
--no-autorestart
# 其他
如何接入pm2
执行:
pm2 ecosystem
会获得一个 ecosystem.config.js
配置文件,进行自定义修改。
然后执行:
pm2 deploy config.js production setup
这会执行 deploy 命令,到目标主机上执行下载。我刚才试没有执行安装,感觉没啥用呢。
因为上一步没有自动执行命令,我们还需要到目标主机上执行 pm2 deploy pm2.config.js producton
这样就好了。
pm2解决的问题
node存在问题: 可靠性低,单线程,单进程,支持单核cpu,不能充分利用cpu,如果进程崩掉,真个web挂起
部署到多核服务器时候,为了充分利用多核cpu,一般启动多个node进程,这就用到 cluster模块了。
cluster 对 child_preocess 提供了一层封装。
简单的一个fork就实现了多进程部署。
利用nginx强大的反向代理,启动多个node进程,绑定不同的端口
http{
upstream cluster{
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
}
server{
listen 80;
server_name a.com
location / {
proxy_pass httpL//cluster;
}
}
}
是一个方案,但和nginx耦合度高,不理想
如何在windows中使用,坑
在windows中需要注意两点,一个开机启动,一个作为服务后台启动
前者简单
npm install pm2-windows-startup -g
pm2-startup install
pm2 save
后者参考这个https://javascript.net.cn/article?id=428
npm i -g pm2-windows-service
# 手动添加环境变量
#右键 [我的电脑] - [属性] - [高级系统设置] - [环境变量] - 新建 [系统变量]
#PM2_HOME=D:\.pm2
# 这个用来指定pm2的配置信息存放位置
pm2-service-install # 选择否,比较省事
#此时, PM2服务已安装成功并已启动, 可以通过 [win + r] - [services.msc] 来查看
#下面用 pm2 来启动我们自己的服务程序 app.js, 然后告诉 pm2 开机后自动运行我 app.js
网友评论