Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS child_进程:通过ssh和流输出并行运行两个进程_Node.js_Ssh_Parallel Processing_Stream_Child Process - Fatal编程技术网

Node.js NodeJS child_进程:通过ssh和流输出并行运行两个进程

Node.js NodeJS child_进程:通过ssh和流输出并行运行两个进程,node.js,ssh,parallel-processing,stream,child-process,Node.js,Ssh,Parallel Processing,Stream,Child Process,首先,这本可以很容易地完成,但我不能使用它,因为 因此,眼前的问题是: 我正在使用child\u进程运行ssh二进制文件,并连接到远程服务器。我可以通过生成的进程的stdin和stdout运行命令并获取它们的输出。但是我有一个用例,需要并行运行两个命令。一个是长时间运行的命令,我需要逐行流式传输,另一个是轻量级命令,其输入取决于流式传输线的内容。是否可以在不产生两个ssh进程的情况下执行此操作 也欢迎使用ssh2或类似的解决方法 (编辑)添加描述性示例: 进程1长时间运行并不断将行写入stdou

首先,这本可以很容易地完成,但我不能使用它,因为

因此,眼前的问题是:

我正在使用
child\u进程
运行
ssh二进制文件
,并连接到远程服务器。我可以通过生成的进程的
stdin
stdout
运行命令并获取它们的输出。但是我有一个用例,需要并行运行两个命令。一个是长时间运行的命令,我需要逐行流式传输,另一个是轻量级命令,其输入取决于流式传输线的内容。是否可以在不产生两个
ssh
进程的情况下执行此操作

也欢迎使用ssh2或类似的解决方法

(编辑)添加描述性示例:


进程1
长时间运行并不断将行写入stdout/file,
进程2
需要在每一行上运行,就像
进程1
生成行一样。在每一点上,当一行的
进程2
完成时,我需要进程1打印的
输入行和
进程2的相应输出有一个非常简单的方法:使用gnu并行。
它通过
sudoapt-y并行安装安装在Ubuntu f.e.上

ssh host \
  'echo -e "date > 1.out && sleep 5\n date > 2.out && sleep 5" | parallel -j0'
ssh host cat 1.out
    > Th 14. Jun 10:54:15 CEST 2018
ssh host cat 2.out
    > Th 14. Jun 10:54:15 CEST 2018
现在您可以ssh连接到cat1.out和cat2.out

<>但是让我们考虑一下你后来的编辑:

prog1.sh:

for i in {1..5}; do
  echo $i >> 1.out
  sleep 1;
done
echo "done" >> 1.out
sleep 1
echo -e "\n" >> 1.out
prog2.sh(监视1.out并执行一些命令,此处为tail):


但是对于第一个和第二个进程,我分别需要输出流。我如何通过并行实现这一点?让我看看。很有趣。非常接近,但我的问题稍微复杂一点,我在问题中添加了一个更具描述性的例子,其余的都是编程。我刚刚演示了如何远程并行启动两个程序。您所描述的机制是两个相互作用的程序的编程问题。因此,上面的第一个呼叫保持原样。第二个程序需要监视1.0上的文件事件并执行操作。但同样,这是一个编程问题。进程2是用什么编程语言编写的?fdo您有代码吗?实际上我不能控制这两个进程,因为它们都是标准的unix命令。我在服务器上没有写权限来编写包装程序/脚本。也许有一种完全不同于并行的方法?
inotifywait -e close_write,moved_to,create -m . |
  while read -r directory events filename; do
    if [ "$filename" = "1.out" ]; then
      # 1.out changed we need to do something
      res=$(tail -1 1.out)
        if [ $res = "done" ]; then
            break;
        fi
      fi
  done

ssh host 'echo -e "./prog2.sh \n ./prog1.sh" | parallel -j 2'