[英]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.