找不到 bin/www 的 PM2 脚本
PM2 Script Not Found for bin/www
最近我决定 运行 我的应用程序使用 pm2 作为服务。对我来说 pm2 start app.mjs
运行 应用程序即服务,但似乎 pm2 没有 运行 我的 express 应用程序正确。我使用 express npm 构建了一个这样的应用程序:
//Imports
import express from "express";
//Setups
const app = express();
const port = process.env.PORT;
app.get("/", async (req, res) => {
res.send("Hello world!");
});
//Running server
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
还尝试了 pm2 start ./bin/www
,这给了我一个 Script not found
错误,而且 express-generator
似乎没问题,而不是应用程序旁边的 express npm。应用程序在开发模式下正常运行 (node app.mjs
)。
更新
我在 Konstantinos Lamogiannis 的帮助下解决了这个问题。设置配置文件和答案后,我将我的 app.mjs
更改为 app.js
表单并将 import
样式更改为 const variable = require("");
并解决了我的问题。我不知道为什么会这样,但似乎 pm2
npm 可能与支持 import
ES6 语法的新 nodejs 功能冲突。
pm2 日志给我这个错误:unhandledRejection 你可能忘记捕捉 Promise 拒绝!
您可以尝试在您的项目根文件夹中创建一个名称为 ecosystem.config.js
的文件,然后在该文件中添加以下代码:
module.exports = {
apps: [{
name: 'yourAppName',
script: 'bin/www/app.mjs', // the path of the script you want to execute,
// Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
instances: 1,
autorestart: true,
watch: false,
error_file: 'err.log',
out_file: 'out.log',
log_file: 'combined.log',
time: true,
env: {
},
}],
};
在上面的配置中,您会注意到在脚本 属性 中它的值是 bin/www/app.mjs。我假设您在 bin/www 目录下有 app.mjs 并放置了该值。
然后运行pm2-runtime start ecosystem.config.js
编辑#1
假设您的启动文件位于项目的根目录中,请使用 script: 'app.mjs'
.
所以你的最终 ecosystem.config.js
将是:
module.exports = {
apps: [{
name: 'yourAppName',
script: 'app.mjs', // the path of the script you want to execute,
// Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
instances: 1,
autorestart: true,
watch: false,
error_file: 'err.log',
out_file: 'out.log',
log_file: 'combined.log',
time: true,
env: {
},
}],
};
然后从您的根项目目录(app.mjs 所在的位置)尝试 pm2-runtime start ecosystem.config.js
。
最近我决定 运行 我的应用程序使用 pm2 作为服务。对我来说 pm2 start app.mjs
运行 应用程序即服务,但似乎 pm2 没有 运行 我的 express 应用程序正确。我使用 express npm 构建了一个这样的应用程序:
//Imports
import express from "express";
//Setups
const app = express();
const port = process.env.PORT;
app.get("/", async (req, res) => {
res.send("Hello world!");
});
//Running server
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
还尝试了 pm2 start ./bin/www
,这给了我一个 Script not found
错误,而且 express-generator
似乎没问题,而不是应用程序旁边的 express npm。应用程序在开发模式下正常运行 (node app.mjs
)。
更新
我在 Konstantinos Lamogiannis 的帮助下解决了这个问题。设置配置文件和答案后,我将我的 app.mjs
更改为 app.js
表单并将 import
样式更改为 const variable = require("");
并解决了我的问题。我不知道为什么会这样,但似乎 pm2
npm 可能与支持 import
ES6 语法的新 nodejs 功能冲突。
pm2 日志给我这个错误:unhandledRejection 你可能忘记捕捉 Promise 拒绝!
您可以尝试在您的项目根文件夹中创建一个名称为 ecosystem.config.js
的文件,然后在该文件中添加以下代码:
module.exports = {
apps: [{
name: 'yourAppName',
script: 'bin/www/app.mjs', // the path of the script you want to execute,
// Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
instances: 1,
autorestart: true,
watch: false,
error_file: 'err.log',
out_file: 'out.log',
log_file: 'combined.log',
time: true,
env: {
},
}],
};
在上面的配置中,您会注意到在脚本 属性 中它的值是 bin/www/app.mjs。我假设您在 bin/www 目录下有 app.mjs 并放置了该值。
然后运行pm2-runtime start ecosystem.config.js
编辑#1
假设您的启动文件位于项目的根目录中,请使用 script: 'app.mjs'
.
所以你的最终 ecosystem.config.js
将是:
module.exports = {
apps: [{
name: 'yourAppName',
script: 'app.mjs', // the path of the script you want to execute,
// Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
instances: 1,
autorestart: true,
watch: false,
error_file: 'err.log',
out_file: 'out.log',
log_file: 'combined.log',
time: true,
env: {
},
}],
};
然后从您的根项目目录(app.mjs 所在的位置)尝试 pm2-runtime start ecosystem.config.js
。