在一行bash中同时运行多个命令

在一行bash中同时运行多个命令,bash,shell,ssh,Bash,Shell,Ssh,我正在寻找类似ssh的替代方案user@node1正常运行时间&sshuser@node2正常运行时间,其中两个SSH命令同时运行。由于它们都在阻塞直到命令返回,&&和它们之间不起作用 我的目标是通过SSH在两个节点上运行无限while循环。因此,第一个将永远不会返回,第二个将永远不会运行。然后,我希望在使用Ctrl+C终止循环后将输出保存到日志文件中,并通过Python读取该文件 有没有简单的解决办法 提前谢谢 捕获SSH输出 一方面,您需要捕获ssh输出/错误并将其存储到文件中,以便以后可以

我正在寻找类似
ssh的替代方案user@node1正常运行时间&sshuser@node2正常运行时间
,其中两个SSH命令同时运行。由于它们都在阻塞直到命令返回,
&&
它们之间不起作用

我的目标是通过SSH在两个节点上运行无限while循环。因此,第一个将永远不会返回,第二个将永远不会运行。然后,我希望在使用Ctrl+C终止循环后将输出保存到日志文件中,并通过Python读取该文件

有没有简单的解决办法


提前谢谢

捕获SSH输出

一方面,您需要捕获ssh输出/错误并将其存储到文件中,以便以后可以使用Python进行处理。为此,您可以:

1-将输出和错误直接存储到文件中

ssh user@node cmd 2>&1 > session.log
2-在控制台中显示输出/错误,同时将其存储到文件中(我建议使用此选项)

检查有关
tee
命令的更多信息

并行运行命令

另一方面,您希望并行运行这两个命令并阻止当前bash进程。您可以通过以下方式实现此目的:

1-阻止当前bash进程,直到完成其子进程

cmd1 & ; cmd2 & ; wait
查看有关
wait
命令的更多信息

2-生成子进程并释放当前bash进程。请注意,尽管主进程结束,但这些进程仍将保持活动状态

nohup cmd & ; nohup cmd & 
整件事

我建议使用tee将这两种方法结合起来(这样您仍然可以在终端上看到ssh输出),并阻塞当前进程,直到所有事情都完成(这样,当您终止主进程时,所有进程也将终止)


捕获SSH输出

一方面,您需要捕获ssh输出/错误并将其存储到文件中,以便以后可以使用Python进行处理。为此,您可以:

1-将输出和错误直接存储到文件中

ssh user@node cmd 2>&1 > session.log
2-在控制台中显示输出/错误,同时将其存储到文件中(我建议使用此选项)

检查有关
tee
命令的更多信息

并行运行命令

另一方面,您希望并行运行这两个命令并阻止当前bash进程。您可以通过以下方式实现此目的:

1-阻止当前bash进程,直到完成其子进程

cmd1 & ; cmd2 & ; wait
查看有关
wait
命令的更多信息

2-生成子进程并释放当前bash进程。请注意,尽管主进程结束,但这些进程仍将保持活动状态

nohup cmd & ; nohup cmd & 
整件事

我建议使用tee将这两种方法结合起来(这样您仍然可以在终端上看到ssh输出),并阻塞当前进程,直到所有事情都完成(这样,当您终止主进程时,所有进程也将终止)


使用
&
在后台运行第一个命令。但是,你不能用Ctrl+C组合键来停止它。@StefanWobbe:这里没有正确意义上的阻塞。它们只是按顺序运行(并且,如果使用
&&&
,则只有在第一个命令成功时才运行第二个命令)。“互相阻塞”意味着程序以某种方式进行通信,可能是通过一个公共信号量。当然
sshuser@node1正常运行时间&sshuser@node2正常运行时间
将在parralel中运行它们,但我看不出有什么好处,因为正常运行时间应该很快就会恢复。使用
&
而不是
&
。使用
&
在后台运行第一个命令。但是,你不能用Ctrl+C组合键来停止它。@StefanWobbe:这里没有正确意义上的阻塞。它们只是按顺序运行(并且,如果使用
&&&
,则只有在第一个命令成功时才运行第二个命令)。“互相阻塞”意味着程序以某种方式进行通信,可能是通过一个公共信号量。当然
sshuser@node1正常运行时间&sshuser@node2正常运行时间
将在parralel中运行,但我看不到有什么好处,因为正常运行时间应该很快就会恢复。使用
&
而不是
&