Node.js 无法使用PM2创建节点脚本群集
我试图用PM2创建节点脚本集群,但出现了错误,并且无法工作 typescript中的主节点脚本Node.js 无法使用PM2创建节点脚本群集,node.js,typescript,pm2,node-cluster,Node.js,Typescript,Pm2,Node Cluster,我试图用PM2创建节点脚本集群,但出现了错误,并且无法工作 typescript中的主节点脚本 import express from 'express'; import mongoose from 'mongoose'; const app = express(); app.get('/', (req, res) => { const tickets = {}; res.send(tickets); }); const setup = async () =>
import express from 'express';
import mongoose from 'mongoose';
const app = express();
app.get('/', (req, res) => {
const tickets = {};
res.send(tickets);
});
const setup = async () => {
console.clear();
try {
await mongoose.connect('mongodb://127.0.0.1:27017/tickets', {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true
});
} catch(err) {
console.log(err);
}
app.listen(5001, () => {
console.log('listing app on 5001');
});
}
setup();
NPM运行脚本
ts-node-dev --poll index.ts
我的PM2启动脚本process.json
{
"apps" : [
{
"name" : "main-server",
"script" : "npm start",
"autorestart": true,
"instances" : 4,
"exec_mode" : "cluster"
}
]
}
和得到错误
SyntaxError: Invalid or unexpected token
3|main-ser | at wrapSafe (internal/modules/cjs/loader.js:1047:16)
3|main-ser | at Module._compile (internal/modules/cjs/loader.js:1097:27)
3|main-ser | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10)
3|main-ser | at Module.load (internal/modules/cjs/loader.js:977:32)
3|main-ser | at Function.Module._load (internal/modules/cjs/loader.js:877:14)
3|main-ser | at /usr/local/lib/node_modules/pm2/lib/ProcessContainer.js:303:25
3|main-ser | at wrapper (/usr/local/lib/node_modules/pm2/node_modules/async/internal/once.js:12:16)
3|main-ser | at next (/usr/local/lib/node_modules/pm2/node_modules/async/waterfall.js:96:20)
3|main-ser | at /usr/local/lib/node_modules/pm2/node_modules/async/internal/onlyOnce.js:12:16
3|main-ser | at WriteStream.<anonymous> (/usr/local/lib/node_modules/pm2/lib/Utility.js:186:13)
SyntaxError:无效或意外标记
包装袋处的3 |主服务器(内部/modules/cjs/loader.js:1047:16)
3 |主服务器| at模块编译(internal/modules/cjs/loader.js:1097:27)
3 | main ser | at Object.Module._extensions..js(internal/modules/cjs/loader.js:1153:10)
3 |主服务器|位于Module.load(内部/modules/cjs/loader.js:977:32)
3 |主服务器| at功能模块|加载(内部/modules/cjs/loader.js:877:14)
3 | main ser | at/usr/local/lib/node_modules/pm2/lib/ProcessContainer.js:303:25
3 | main ser | at wrapper(/usr/local/lib/node_modules/pm2/node_modules/async/internal/once.js:12:16)
3 |主服务器|在下一个(/usr/local/lib/node|u modules/pm2/node|u modules/async/falter.js:96:20)
3 | main ser | at/usr/local/lib/node|u modules/pm2/node|u modules/async/internal/onlynce.js:12:16
3 |主服务器|位于写入团队。(/usr/local/lib/node_modules/pm2/lib/Utility.js:186:13)
当我使用单个实例“ts node dev--poll index.ts”运行direct命令时,它可以很好地使用once实例运行。但在PM2集群模式下,它不工作,应用程序也不加载 我认为问题在于您正在尝试使用PM2运行typescript代码。我自己从来没有试过,但很明显PM2有一个好办法。如果这不起作用,您可以自己传输代码,然后通过PM2运行它。我认为您必须以不同的方式调用主脚本文件。不久前,我尝试运行一个进程文件。在花了很多时间之后,它不知怎么地对我起了作用。尝试使用此配置:
{
"apps" : [
{
"name": "main-server",
"script": "./index.ts",
"node_args": [
"ts-node-dev",
"--poll"
],
"autorestart": true,
"instances": 4,
"exec_interpreter": "node",
"exec_mode": "cluster",
"env": {
"NODE_ENV": "development"
},
"env_production": {
"NODE_ENV": "production"
}
}
]
}
正在调用文件,而不是npm命令script
- 参数在
节点参数中给出
是exec\u解释器
或整个路径,例如节点
/usr/bin/nodejs
- 不确定,但在任何地方阅读定义
都很重要env
没有测试。祝您好运。您的命令如何使用pm2运行?pm2 start process.json[process.json命令已添加在问题中]是,它正在工作。我已将exec_解释器直接更改为ts代码