[azuo1228@Server Meanjs-MMM]$ pm2 list
┌──────────┬────┬─────────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │
├──────────┼────┼─────────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤
│ server │ 0 │ cluster │ 12107 │ online │ 0 │ 16s │ 0% │ 93.5 MB │ disabled │
│ server │ 1 │ cluster │ 12113 │ online │ 0 │ 16s │ 0% │ 90.4 MB │ disabled │
└──────────┴────┴─────────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app
查看启用程序后端口侦听
[azuo1228@Server Meanjs-MMM]$ netstat -apn | grep 3000
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 11553/PM2 v2.2.2: G
tcp 0 0 127.0.0.1:3000 127.0.0.1:51950 TIME_WAIT -
停用运行的程序
stop并不能清理程序,也不会释放端口,而是要delete:
[azuo1228@Server Meanjs-MMM]$ pm2 delete all
[PM2] Applying action deleteProcessId on app [all](ids: 0,1)
[PM2] [server](1) ✓
[PM2] [server](0) ✓
┌──────────┬────┬──────┬─────┬────────┬─────────┬────────┬─────┬─────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │
└──────────┴────┴──────┴─────┴────────┴─────────┴────────┴─────┴─────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app
查看detele之后的端口
delete之后,可以看到没有端口在侦听了
[azuo1228@Server Meanjs-MMM]$ netstat -apn | grep 3000
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
[azuo1228@Server Meanjs-MMM]$
pm2简介
常用命令一般就是:
其实有上面的列表就足够,便于大家参考,列一下cli大全
pm2使用
启动程序,2并发,我不说简单的使用了,直接说并发。
pm2 start xxx.js 就能启动你需要的server服务,然后-i 指定多开数量。
查看程序运行:
查看启用程序后端口侦听
停用运行的程序
stop并不能清理程序,也不会释放端口,而是要delete:
查看detele之后的端口
delete之后,可以看到没有端口在侦听了
其实有人在网上也说了pm2的种种不好,比如stop之后端口没有释放,其实参考官网就知道了,有delete命令的,这里就不多说这个基本的使用了。
这里就先说这么多,以后再说如何建立ecosystem脚本来实现配置,以及pm2 保存任务实现开机重启的原理。
pm2 启动自动
1生成脚本
[azuo1228@Server Meanjs-MMM]$ pm2 ecosystem
会在工程下面生成一个ecosystem.config.js。
2修改脚本
里面有两个供start和deploy的部分,修改如下:
1-这里去掉deploy的部分
2-只是留下一个程序(可以配置多个程序的),分两个env来启动程序
代码如下:
注意,这里写的脚本指定的执行文件,无需用绝对路径,因为最后保存save,用来重启的dump文件是一个文本文件,可以看到里面的内容:
设置好了解释器,执行路径,已经程序执行的cwd,这点非常好。
3分env区别运行脚本
里面有两种env,env_dev和env_prod,那么运行的时候,只要指定--env dev或者prod就可以了,不需要前面的env_。
1-dev环境
2-prod环境
4发现问题
一个app只能以一种环境运行,也就是上面的脚本,一个程序两种环境,其实是无法启用两种环境的,所以需要写两个程序,然后不指定env_xxx,而是指定一个默认的env(就是env字段,不带后缀),这样不同的环境设置不同的env,脚本如下:
设置两个app,都用默认env,但是里面的值不同, 然后启动,一次就是两个app都启动了:
5保存脚本,重启
重启之后,可以看到,该运行的程序已经在运行了:
然后看看pm2 list