当我手动运行这个pidof命令时,它可以工作。然后放入我的server.js。
// send signal to start the install script
var spw = cp.spawn('/sbin/pidof', ['-x', 'wait4signal.py', '|', 'xargs', 'kill', '-USR1']);
spw.stderr.on('data', function(data) {
res.write('----- Install Error !!! -----\n');
res.write(data.toString());
console.log(data.toString());
});
spw.stdout.on('data', function(data) {
res.write('----- Install Data -----\n');
res.write(data.toString());
console.log(data.toString());
});
spw.on('close', function(data) {
res.end('----- Install Finished, please to to status page !!! -----\n');
console.log('88');
});
在网络上我只看到“-----安装完成,请转到状态页面!!!”。我的安装脚本似乎永远不会得到这个USR1信号。有什么问题吗?
答案 0 :(得分:0)
问题是您有两个单独的命令。您正在将/sbin/pidof
命令的输出传递给xargs
命令的输入流。如果您正在使用spawn
(而不是exec
,这与您在命令行中编写的字符串完全相同),则需要为每个命令生成一个进程。
按如下方式生成您的流程:
const pidof = spawn('/sbin/pidof', ['-x', 'wait4signal.py']);
const xargs = spawn('xargs', ['kill', '-USR1']);
现在将第一个进程的输出传递给第二个进程的输入,如下所示:
pidof.stdout.pipe(xargs.stdin);
现在,您可以在xargs
进程中收听事件,如下所示:
xargs.stdout.on('data', data => {
console.log(data.toString());
});