簡體   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