【问题标题】:Executing shell scripts that take long time using child process module in nodejs在nodejs中使用子进程模块执行需要很长时间的shell脚本
【发布时间】:2018-01-31 08:48:58
【问题描述】:

下面是我编写的代码,用于通过发送 AJAX 请求在 UNIX 中执行名为 mqValidation.sh 的脚本。这会产生一个新的子进程,当子进程退出时,它会发送一个文本文件响应,其中显然包含脚本的输出。但是,我在这里面临的问题是,由于脚本需要很长时间才能完成,所以在第一个子进程退出之前会产生一个新的子进程,这意味着脚本正在再次执行。

var express = require('express');
var app = express();
var cp = require('child_process');


app.post('/triggerMQ', function(req,res){

ls = cp.spawn('./mqValidation.sh',req.body.envs,{cwd:"./MQValidation"});


ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

ls.on('exit', (code) => {
  console.log("Child process exited");
  res.sendFile(__dirname+'/MQValidation/html.txt');
});

});

app.listen(8000, function(){
    console.log("app listening at port 8000.....");
});

请帮忙!!

【问题讨论】:

  • 以及它应该如何工作?只有当您多次点击 URL 时才会再次创建新的子进程,这意味着一切都按预期工作
  • U 表示浏览器再次发送请求,因为它没有收到任何响应
  • @smnbbrv 你的意思是请求正在被浏览器重试

标签: node.js ajax shell child-process


【解决方案1】:

增加服务器端的超时解决了这个问题。看起来 120 秒后,浏览器正在发送另一个请求,再次触发脚本。

【讨论】:

    猜你喜欢
    • 2020-03-07
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 2011-05-04
    • 2017-12-08
    • 1970-01-01
    • 2017-11-13
    • 2012-11-27
    相关资源
    最近更新 更多