npm的pm2网址:https://www.npmjs.com/package/pm2
说明:
npm上的这个pm2[P(rocess) M(anager) 2 ]是在解决自己一个node项目时,找到的一个解决方案。具体pm2肯定有更多的功能,我在此处也就仅仅是将我用到的地方拿出来总结一下。
准备:
- 安装node
- 安装java(非必要,只是我这个项目中嵌入了java项目,所以这个例子中是必要的)
使用:
npm安装pm2
$ npm install pm2 -g
使用pm2来启动一个应用
$ pm2 start app.js
结合实际项目的使用,pm2.node.web.test.config.js是作为一个配置,让pm2去加载,然后去做管理启动。
pm2.node.web.test.config.js:
module.exports = {
apps: [
{//这个是我这个项目的启动脚本 启动一
name: 'web-runner',
script: './www',
watch: true,//设置被监听
env: {
PORT: 3008//端口
},
},
{//启动二
name: 'web-runner',
script: './www',
watch: true,
env: {
PORT: 3009
},
},
{//附带去启动一个java的jar,也是一个服务,通过启动一个shell脚本去启动对应的jar
name: 'uniubi-user-login',
script: './user.sh',
watch: false
},
{ //这个也是一个java项目,是微服务的一个服务组件之一,用来做Eureka注册用的,
//对应启动一,这样使得不同的语言的项目都可以在Eureka中统一被发现与注册。
name: 'uniubi-sidecar-node-web',
script: './sidecar.sh',
watch: false,
env: {
applicationName: 'uniubi-sidecar-node-web',
sidecarDelegateIp: '192.168.20.171',
sidecarPort: '9008',
sidecarDelegatePort: '3008',
}
},
{
name: 'uniubi-sidecar-node-web',
script: './sidecar.sh',
watch: false,
env: {
applicationName: 'uniubi-sidecar-node-web',
sidecarDelegateIp: '192.168.20.171',
sidecarPort: '9009',
sidecarDelegatePort: '3009',
}
}
],
};
关于配置的解释补充:
刚刚配置文件中所提及的java项目的sidecar其实什么业务都没有,只是单纯的做一件事,从系统中获取环境env
private static Map<String, String> sysEnv = System.getenv();
然后再获取,然后再做自己的向Eureka注册的事。
String applicationName = sysEnv.get("applicationName");
int sidecarPort = Integer.valueOf(sysEnv.get("sidecarPort"));
String sidecarDelegateIp = sysEnv.get("sidecarDelegateIp");
int sidecarDelegatePort = Integer.valueOf(sysEnv.get("sidecarDelegatePort"));
...
在pm2 start pm2.node.web.test.config.js执行了这句话后,一下子就起了n多个项目,而且可以是不同的项目。当然在实际的生产中呢,我们会根据实际的情况去编写这个配置的js,设置根据不同的环境去写不同的js在不同的环境下执行。
在使用了pm2去启动了这些项目后,我们可以去监控我们想要监控的项目。比如,js项目不同于java项目,可能会出现一些没有考虑到的异常导致项目挂了。pm2可以自动重启,并且记录详情。
下面看一下我们实际的运行情况吧。上图我就是跑了另一个js配置文件。
我用到的其他pm2的指令(以后再补充):
pm2 list //show pm2下管理的app
pm2 restart *.js //重新启动
pm2 show <id|name> //查看某个app的详情
pm2 delete * //删除
pm2 stop * //停止