繁体   English   中英

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

[英]Run multiple commands simultaneously in bash in one line

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

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

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

提前致谢!

捕获 SSH output

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM