私はSSHを介して3つのホスト(2つのリモートホスト、1つのテスト用ホスト)に接続し、記録したい端末にテキストを出力する長期実行GUIプログラムを実行する簡単なbashスクリプトを作成しました。
#!/bin/bash
ssh -f -X user@remote1 '(python -u long_running_program.py &> ~/log1.txt)'
ssh -f -X user@remote2 '(python -u long_running_program.py &> ~/log2.txt)'
ssh -f -X user@localhost '(python -u long_running_program.py &> ~/log3.txt)'
multitail -s 3 ~/log*
上記のように、fパラメータを使用してsshを呼び出すと、バックグラウンドで実行され、スクリプトが実行され続けることがあります。リモートサーバーからバッファリングされていないスイッチを使用してPythonプログラムを呼び出し、出力をログファイルにリダイレクトします(リモートおよびローカルシステムのホームディレクトリは両方ともネットワークマウントドライブにあるため、〜を使用するとすべてのシステムで同じ結果が得られます) 。パス)どこに)。
上記の技術は技術的には可能ですが、リモートコンピュータで2つのログ(log1、log2)を更新するのは非常に遅いです。ファイル更新は、ファイルを表示するためにマルチテール、viなどを使用するかどうかにかかわらず、20秒以上かかることがありますが、ローカルログファイル(log3)の更新はすぐに行われます。
これが発生しないことを確認するには、SSHを介してリモートで手動で接続し、出力をファイルにリダイレクトせずにプログラムを実行できます。予想通り、出力は遅延なしで連続的にストリーミングされます。また、バッファリングをオフにしてスクリプト/tee/などを使用するなど、さまざまな試みをしてみましたが、役に立ちませんでした。
原因や解決策を知っている人はいますか?
ベストアンサー1
使用することをお勧めしますパフパフ複数のシリアルSSHコマンドを同時に実行するのではなく、複数の並列SSHセッションを実行するように特別に設計されています。
例えば、
pssh -i -H user@remote1 -H user@remote2 -H user@localhost '(python -u long_running_program.py &> ~/log$PSSH_NODENUM.txt)'