在nodejs中使用子进程模块执行需要很长时间的shell脚本

时间:2018-01-31 08:48:59

标签: node.js ajax shell child-process

下面是我编写的代码,用于通过发送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.....");
});

请帮助!!

1 个答案:

答案 0 :(得分:0)

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