最近用node搞了一个测试页面供外部访问,但是每当关闭控制台后(相当于关闭了node服务)页面就无法访问了,于是就找到了pm2。pm2是一个进程管理器,它能让你的项目全天24小时在线。
安装
可以通过npm或者yarn安装最新版本的pm2
npm install pm2@latest -g
or
yarn global add pm2
启动
最简单的启动方式就是像node似的在控制台运行pm2命令
pm2 start app.js
or
pm2 start app.js --name app --watch
--options
# 指定应用程序名称
--name <app_name>
# 监听文件,当文件发生更改时重启服务
--watch
# 设置应用程序重新加载的内存阈值
--max-memory-restart <200MB>
# 指定日志文件
--log <log_path>
# 向脚本传递额外的参数(pm2启动的脚本需要额外的参数时用到)
-- arg1 arg2 arg3
# 自动重新启动之间的延迟时间
--restart-delay <delay in ms>
管理进程
可以通过pm2 list命令查看pm2管理的所有应用

pm2 restart name
pm2 reload name
pm2 stop name
pm2 delete name
name就是上图列表中的应用程序的具体名称,同样的也可以将具体的name换成具体的id。将name换成all参数的话是管理所有的应用程序。
生成配置文件
当你的pm2命令传参较多或者进行多个操作的话你可以将这些参数集成到配置文件中。
运行以下命令
pm2 ecosystem
会生成一个ecosystem.config.js
module.exports = {
apps : [{
name: "app",
script: "./app.js",
env: {
NODE_ENV: "development",
},
env_production: {
NODE_ENV: "production",
}
}]
}
你可以通过pm2操作此配置文件替代在控制台里传参:
pm2 [start|restart|stop|delete] ecosystem.config.js
实战
我的项目是用http-server做为后端服务,静态文件存放于dist目录,端口号为8111
通过参数启动服务:
pm2 start ./node_modules/http-server/bin/http-server -- ./dist p 8111
通过配置文件启动:
pm2 start pm2.config.js
pm2.config.js文件配置如下:
module.exports = {
apps : [{
name: "smartApiTest",
script: "./node_modules/http-server/bin/http-server",
env: {
NODE_ENV: "development",
},
env_production: {
NODE_ENV: "production",
},
args: "./dist -p 8111"
}]
}