首页 > 解决方案 > 在一行中同时在bash中运行多个命令

问题描述

我正在寻找类似的替代方法ssh user@node1 uptime && ssh user@node2 uptime,其中两个 SSH 命令同时运行。因为它们在命令返回之前都处于阻塞状态,&&并且;它们之间不起作用。

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

有一个简单的解决方案吗?

提前致谢!

标签: bashshellssh

解决方案


捕获 SSH 输出

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

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

ssh user@node cmd 2>&1 > session.log

2-在控制台中显示输出/错误,同时将其存储到文件中(我会推荐这个)

ssh user@node cmd 2>&1 | tee session.log

检查以获取有关该tee命令的更多信息。

并行运行命令

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

1-阻止当前的 bash 进程,直到他们的孩子完成。

cmd1 & ; cmd2 & ; wait

检查以获取有关该wait命令的更多信息。

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

nohup cmd & ; nohup cmd & 

整个东西

我建议使用 tee 结合这两种方法(这样你仍然可以在终端上看到 ssh 输出)并阻塞当前进程直到一切都完成(这样当你杀死主进程时,所有进程也被杀死)。

ssh user@node1 uptime 2>&1 | tee session1.log & ; ssh user@node2 uptime 2>&1 | tee session2.log & ; wait

推荐阅读