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