pm2作为一款进程管理神器,除了命令行的启动方式外,其还对应有sdk,集成到程序中,我们可以更加连接到已有或创建pm2的守护进程,与其进行交互,动态,编程式地控制程序的启停等。以下为示例:
示例
假设有个 http server程序,
// server.js
let port = process.env.port ? process.env.port : 8000;
const http = require("node:http");
http
.createServer((req, res) => {
let workerPid = process.pid;
res.writeHead(200);
res.end(`hello world, I am worker ${workerPid}\n`);
})
.listen(port);
典型用法如下,
const pm2 = require("pm2");
// This will spawn or connect to local PM2
// Either connects to a running pm2 daemon (“God”) or launches and daemonizes one.
// 1. connect
pm2.connect(function (err) {
if (err) {
console.error(err);
process.exit(2);
}
pm2.start(
{
script: "server.js",
name: "http-server",
},
function (err, apps) {
if (err) {
console.error(err);
return pm2.disconnect();
}
// 2. list
pm2.list((err, list) => {
console.log(err, list);
// 3. restart
pm2.restart("http-server", (err, proc) => {
// 4. disconnect
// Disconnects from PM2
pm2.disconnect();
});
});
}
);
});
1,connect: 连接到 pm2 守护进程 或 启动一个新的 pm2 守护进程。
2,list: 获取当前 pm2 管理的所有进程列表。
3,restart: 重启指定的应用。
4,disconnect: 断开与 pm2 守护进程的连接, 注意断开后,启动的程序还在。
如果想这段程序退出时,对应启动pm2程序也退出,可以加上这段代码
// graceful exit
process.on("SIGINT", function () {
pm2.stop("http-server", (err, proc) => {
console.log(err, proc);
// process.exit
process.exit(0);
});
});
网友评论