Nodejs express 4.x forever pm2 nohup 问题
Nodejs express 4.x forever pm2 nohup 问题
1、我用express4.x 做了个东西 地址 qq.team.vogso.com 2、上传图片用了 中间件 formidable 3、只有 npm start 的时候 上传东西都没问题, 用 forever pm2 nohup 后台运行都会有问题 可能刚开始可以上传 过一会就 不能上传了
其中 forever 中 提示
warn: --minUptime not set. Defaulting to: 1000ms warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
想请教一下啊 这个两个一般需要设置吗? 度娘了一下 还是没摸清楚。。 这两个参数是什么作用呢,
Nodejs express 4.x forever pm2 nohup 问题
问题描述
我使用 Express 4.x 搭建了一个应用,并且使用了 formidable
中间件来处理文件上传。当通过 npm start
启动应用时,一切正常。但是当我使用 forever
, pm2
, 或者 nohup
在后台运行应用时,上传功能会出现问题,特别是开始时可以正常工作,但过一段时间后就会出现问题。
报错信息
在使用 forever
时,会看到以下警告信息:
warn: --minUptime not set. Defaulting to: 1000ms
warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
参数解析
- –minUptime: 设置应用程序最小运行时间(毫秒)。如果应用程序在该时间内退出,
forever
将不会重启它。默认值为 1000 毫秒。 - –spinSleepTime: 如果应用程序退出,
forever
会在重新启动之前等待的时间(毫秒)。默认值为 1000 毫秒。
解决方案
为了确保 forever
正确地管理你的应用进程,建议设置这两个参数。你可以通过以下命令来启动你的应用:
# 使用 forever
forever start --minUptime 3000 --spinSleepTime 1000 app.js
# 使用 pm2
pm2 start app.js -- minUptime 3000 --spinSleepTime 1000
示例代码
假设你的 app.js
文件如下:
const express = require('express');
const formidable = require('formidable');
const app = express();
app.post('/upload', (req, res) => {
const form = new formidable.IncomingForm();
form.parse(req, (err, fields, files) => {
if (err) {
console.error(err);
return res.status(500).send('Error uploading file.');
}
res.send('File uploaded successfully.');
});
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
总结
通过设置 --minUptime
和 --spinSleepTime
参数,可以更好地控制 forever
和 pm2
对你应用的管理。这将有助于避免由于应用短暂退出而导致的频繁重启问题。如果你仍然遇到问题,建议检查日志文件以获取更多信息。
{ [Error: EXDEV, rename ‘/tmp/11b8e16bda2fab041e2890ce32e6b108’] errno: 52, code: ‘EXDEV’, path: ‘/tmp/11b8e16bda2fab041e2890ce32e6b108’ }
原来是这个错误, 据说是跨分区了
怎么手动设置 tmp 目录呢?
摘要
你提到在使用 forever
或 pm2
背景运行 Node.js Express 服务器时遇到上传图片的问题。还提到了 forever
的警告信息,询问这些参数是否需要设置。
参数解释与设置建议
1. --minUptime
- 作用:设置应用程序在退出前必须保持运行的最短时间(毫秒)。如果应用程序在该时间段内崩溃,
forever
将会重新启动它。 - 建议设置:一般情况下,建议设置为
1000
毫秒(默认值),但你可以根据实际情况调整。
2. --spinSleepTime
- 作用:当应用程序在
--minUptime
时间内退出时,forever
会等待一段时间再尝试重新启动应用程序。这个参数就是设置等待的时间(毫秒)。 - 建议设置:默认值为
1000
毫秒。同样,根据实际情况调整。
示例代码
如果你希望手动配置这些参数,可以在命令行中这样调用 forever
:
# 设置 minUptime 和 spinSleepTime
forever start --minUptime 1000 --spinSleepTime 1000 app.js
对于 pm2
,你可以使用以下命令进行设置:
# 使用 pm2 配置文件
pm2 start ecosystem.config.js
如果创建 ecosystem.config.js
文件,内容如下:
module.exports = {
apps : [{
name: "app",
script: "./app.js",
min_uptime: "1000",
max_restart: 10,
autorestart: true,
exp_backoff_restart_delay: 100
}]
}
解决方案
如果你发现上传功能在后台运行时不稳定,可能是因为 formidable
中间件或其他依赖项在多线程或进程管理器环境中出现问题。确保所有依赖项和中间件版本兼容,并考虑以下调试步骤:
- 确保
formidable
版本是最新的。 - 在生产环境中禁用日志记录中的冗余信息,以减少性能影响。
- 查看是否有任何资源限制(如内存)导致问题。
- 监控服务器日志以找到具体的错误原因。
希望这些建议能帮助你解决问题!