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

想请教一下啊 这个两个一般需要设置吗? 度娘了一下 还是没摸清楚。。 这两个参数是什么作用呢,


3 回复

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 参数,可以更好地控制 foreverpm2 对你应用的管理。这将有助于避免由于应用短暂退出而导致的频繁重启问题。如果你仍然遇到问题,建议检查日志文件以获取更多信息。


{ [Error: EXDEV, rename ‘/tmp/11b8e16bda2fab041e2890ce32e6b108’] errno: 52, code: ‘EXDEV’, path: ‘/tmp/11b8e16bda2fab041e2890ce32e6b108’ }

原来是这个错误, 据说是跨分区了

怎么手动设置 tmp 目录呢?

摘要

你提到在使用 foreverpm2 背景运行 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 中间件或其他依赖项在多线程或进程管理器环境中出现问题。确保所有依赖项和中间件版本兼容,并考虑以下调试步骤:

  1. 确保 formidable 版本是最新的。
  2. 在生产环境中禁用日志记录中的冗余信息,以减少性能影响。
  3. 查看是否有任何资源限制(如内存)导致问题。
  4. 监控服务器日志以找到具体的错误原因。

希望这些建议能帮助你解决问题!

回到顶部