pm2 我想用 Node.js 在服务器上搭过服务的应该都知道。因为正常情况跑 node 服务需要在终端执行 node inde.js 命令,而服务器我们一般是使用终端通过 SSH 远程连接,我们不可能一直保持与服务器的连接,也不可能一直开着运行服务的终端窗口,所以我们需要一个工具来帮忙挂着这个服务,pm2 就是这么个工具。

安装

1
sudo npm install pm2 -g

基础用法

启动某个服务

1
2
3
4
# --watch 表示:服务文件发生变化时,pm2会自动帮你重启服务
pm2 start app.js --watch
以 xxx 为命名启动进程
pm2 start app.js --watch --name xxx

查看启动中的服务

1
pm2 list

停止某个或全部服务

1
2
3
4
5
6
7
8
pm2 stop name || id || 'all'

# 比如我要停止上图中名为 JinYa 的这个服务
pm2 stop JinYa
# 或者
pm2 stop 2
# 如果停止全部
pm2 stop all

重启某个或全部服务

1
2
3
4
5
6
7
8
pm2 restart name || id || 'all'

# 比如我要重启上图中名为 JinYa 的这个服务
pm2 restart JinYa
# 或者
pm2 restart 2
# 如果停止全部
pm2 restart all

删除某个或全部服务

1
2
3
4
5
6
7
8
pm2 delete name || id || 'all'

# 比如我要重启上图中名为 JinYa 的这个服务
pm2 delete JinYa
# 或者
pm2 delete 2
# 如果停止全部
pm2 delete all

查看某个服务的描述

1
pm2 describe name || id

如果服务器上有十几甚至几十个服务,那么一个一个启动就显得十分繁琐,所以 pm2 也可以通过配置文件启动。

通过配置文件批量启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 创建一个名为 server.json 的文件
{
"apps": [
{
"name": "server1", // 服务名称
"script": "./xxx/index.js", // 服务入口文件路径
"watch": true // 监听服务,服务发生变化时自动重启
},
{
"name": "server2",
"script": "./xxx/app.js",
"watch": true
},
]
}
1
pm2 start server.json

上面 stoprestardelete 命令其实都可通过 json 文件来批量执行。

查看进程资源消耗情况

1
pm2 monit

上面这些命令只是一些我在日常使用中经常用到的基础命令,pm2 这个工具所能做的远远不止这些。它还可以做负载均衡,内存监控等其他很多事情,只是我的应用场景没用那么复杂,所以并没有深入了解这些功能。