PM2 - simple practice

Recording pm2 learning


最近服务器马上到期了,本着不浪费的原则,想在上面跑几个node服务玩玩。服务器安装了宝塔面板,在宝塔里打开命令行并启动我的node服务,本地测试了一下还不错。可当我关掉宝塔的windows窗口后,我的服务挂掉了!!!原来同时关掉的还有我的服务进程。。。一番研究下来发现了一个node 进程管理神器 - PM2


PM2 是什么 ?

PM2是一个带有内置负载均衡器的Node.js应用程序生产运行时和进程管理器。它可以做到永久保持应用程序活跃,无需停机即可重新加载它们。
官方问文档中提到了它的很多特性,比如:

进程守护:系统崩溃时自动重启,确保服务高可用性

负载均衡:通过创建多个子进程共享同一服务器端口,充分利用多核CPU性能

日志管理:自动收集和保存应用程序日志

终端监控:实时监控应用程序运行状态

集群模式:支持零秒停机重载应用程序

跨平台:多个系统支持

PM2简单实践

我们用一个简单的例子来实践pm2。

首先安装PM2

git bash 复制代码
npm install pm2 -g
//yarn global add pm2

验证是否安装成功:

git bash 复制代码
pm2 --version

项目初始化

新建一个项目, 安装依赖:

git bash 复制代码
npm init -y
npm i express

新建两个文件
server.js

javascript 复制代码
const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send({
        code: 200,
        message: 'This is server 1'
    });
});

app.listen(4200, () => {
    console.log('Server1 is running on port 4200');
});

server2.js

javascript 复制代码
const express = require('express');

const app = express();

app.get('/', (req, res) => {
    res.send({
        code: 200,
        message: 'This is server 2'
    });
});

app.listen(4201, () => {
    console.log('Server2 is running on port 4201');
});

pm2管理服务

两个脚本模拟两个node 服务。如果正常启动这两个服务,我们需要打开两个命令行窗口再用node 执行。
但是有了pm2后,我们可以统一管理这两个服务:

git bash 复制代码
pm2 start server.js server2.js

基本启动,我们可以同时启动这两个服务:

指定别名

git bash 复制代码
pm2 start server.js --name my-server1

热重载 当文件变化,自动重启服务

git bash 复制代码
pm2 start server.js --watch

LOG

git bash 复制代码
pm2 logs //查看所有服务日志
pm2 logs server //查看指定服务日志

监控与性能分析

git bash 复制代码
pm2 monit

当然PM2还提供了很多的命令,可以尝试一下。

命令 作用
pm2 list 查看所有PM2管理的服务
pm2 restart 重启指定服务
pm2 stop app_name 停止指定服务
pm2 delete app_name 删除指定服务

开机自启动配置
如果我们希望服务器重启后可以自启动PM2管理的服务可以按照以下步骤
首先执行

git bash 复制代码
pm2 startup
pm2 save

然后保存进程列表

git bash 复制代码
pm2 save

统重启后,PM2会自动恢复之前保存的应用程序列表

Summary

以上只是PM2的简单实用,在实际项目中要复杂的多,需要根据配置文件,来管理我们的不同的服务。如果你对PM2非常的感兴趣,可以阅读官方文档 PM2