Nodejs 执行系统命令,等待时间过长
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.promisify
将 exec
函数转换为返回 Promise 的版本,然后通过 Promise
和 setTimeout
实现了超时处理。如果命令执行时间超过指定的超时时间(例如 5 秒),则会抛出一个超时错误。
请根据实际情况调整命令和超时时间。