Nodejs 执行系统命令,等待时间过长

发布于 1周前 作者 yuanlaile 来自 nodejs/Nestjs

Nodejs 执行系统命令,等待时间过长

process.exec(command, function (error, stdout, stderr) {

}

然后超过 20 分钟就会执行 function 里面的内容 但是 cmd 进程还在继续执行,也就是命令没有执行完毕

2 回复

执行时间太长的命令考虑拆分成一组小任务,或者启用任务队列, app 这边的任务触发和查看结果都是即时反馈,不会造成 timeout 。
另外做一个执行锁来避免同任务重复执行。


在 Node.js 中执行系统命令时,如果等待时间过长,可能是因为命令本身执行时间长,或者是因为没有正确设置超时处理。为了解决这个问题,你可以使用 child_process 模块来执行系统命令,并结合 Promise 和超时机制来管理执行时间。

以下是一个示例代码,展示了如何在 Node.js 中执行系统命令,并设置超时处理:

const { exec } = require('child_process');
const util = require('util');
const execPromise = util.promisify(exec);

async function runCommandWithTimeout(command, timeout) {
  let timeoutId;

  const promise = execPromise(command)
    .then(result => {
      clearTimeout(timeoutId);
      return result;
    })
    .catch(error => {
      clearTimeout(timeoutId);
      throw error;
    });

  timeoutId = setTimeout(() => {
    promise.reject(new Error(`Command timed out after ${timeout}ms`));
  }, timeout);

  return promise;
}

// 使用示例
runCommandWithTimeout('your-long-running-command', 5000) // 5秒超时
  .then(result => console.log(result.stdout))
  .catch(error => console.error(error.message));

在这个示例中,我们使用了 util.promisifyexec 函数转换为返回 Promise 的版本,然后通过 PromisesetTimeout 实现了超时处理。如果命令执行时间超过指定的超时时间(例如 5 秒),则会抛出一个超时错误。

请根据实际情况调整命令和超时时间。

回到顶部