0

自動化された SSH スクリプトを使用して、ハードウェア テストを SSH 経由でいくつかのコンピューターにコピー/実行/ログ記録していますが、1 つのことを除いてすべて正常に動作します。テスト ファイルは、30 分ごとに無期限に実行され、データを収集し、強制終了されるまでファイルに書き込むことになっています。より良い例がない場合:

注: これらのファイルはどちらも実際のコードではありません。目の前にコピーするものはありません。

ファイル.py:

#!/usr/bin/env python
import os

idleUsage = []
sleepTime = 1800

while(True):
    holder = os.popen('mpstat | awk \'{printf("%s\n", $9)}\'')
    idleUsage.append(100.0 - float(holder[1]))

    f = open("output.log", 'w')
    f.write(%idleUsage)
    f.close()

    sleep(sleepTime)

自動-ssh.sh:

#!/bin/bash

autossh uname1 password1 ip1 command <----gets stuck after ssh runs
autossh uname2 password2 ip2 command
autossh uname3 password2 ip3 command

必ずコマンドの実行でスタックします。コード行全体の最後にアンパサンドを入れるだけでなく、「コマンド &」も試しました。誰かアドバイスがありますか?

4

2 に答える 2

1

現在のコンテキストはわかりませんが、subprocessを使用することをお勧めします:

from subprocess import Popen

p1 = Popen(["sar"], stdout=PIPE)
p2 = Popen(["grep", "kb"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
于 2012-07-13T16:57:28.003 に答える
0

シェル スクリプトが ssh 経由でリモート マシンに接続し、無限の python コマンドを実行し、その ssh 接続をバッ​​クグラウンドに移行させたいですか?

#!/bin/sh
ssh thingie 1 > out.1 &
ssh thingie 2 > out.2 &
ssh thingie 3 > out.3 &
wait

これにより、個々のファイルへのバックグラウンド ロギングで 3 つの ssh コマンドが開始され、スクリプトはすべて終了するまで待機します (wait引数として pid が指定されていない場合、すべての子が終了するのを待機します)。スクリプトを強制終了すると、子の ssh プロセスも終了するはずです。それがあなたが求めているものかどうかはわかりませんが、何かの助けになるかもしれませんか?:)

于 2012-07-13T17:53:01.107 に答える