長期実行プログラムのためのSSH

長期実行プログラムのためのSSH

リモートコンピュータでタスクを実行するためのPythonスクリプトを作成しています。実際、Pythonスクリプトは私のコンピュータで実行されており、リモートコンピュータはUbuntuを実行しているボットです。

私が下したコマンドはロボットソフトウェアを起動して終了しません(^ cで終了しない限り)。次の20秒間(または「静か」になるまで)、出力を表示するコマンドを実行し、スクリプトが実際に完了するようにします。

私はsshオプションでsubprocess.run(およびバリアント)を使用し、&シンボルでコマンドを終了しようとしました。これらのどれも機能しません。

これまでに得たものは次のとおりです(いくつかの実験的な選択肢がコメントアウトされていることがわかります)。私が試したことはすべてsshでブロックされます(サブプロセスが完了するのを待っていますが完了しません)、単に実行され、sshパスワードを求めるメッセージも表示されません。

def ssh(self, command_line):
        ssh_cmd = ["ssh", "pi@" + self.cfg["BRU_MASTER_IP"], command_line]
        print(ssh_cmd)
        print("1")
        #cmd1 = subprocess.Popen(" ".join(ssh_cmd), shell=True, stdout=subprocess.PIPE)
        completed_process = subprocess.run(" ".join(ssh_cmd), shell=True, capture_output=True, text=True)
        #completed_process = subprocess.Popen(" ".join(ssh_cmd), shell=True, stdout=subprocess.PIPE)
        print("2")
        #completed_process.communicate()
        print("2a")
        #cmd1_out = completed_process.stdout.read()
        print(completed_process.stdout.read())
        print("3")

ベストアンサー1

のLinux/Unixアドバイスをお手伝いしますpython

無限の長期実行コマンドがあるとしましょう。

と言えるping $HOSTNAME

ping $HOSTNAMESSHを使用してリモートシステムで実行しようとしています。

 ssh user@remoteMachine 'ping $HOSTNAME'

ただし、ping $HOSTNAMEリモートコンピュータが15秒後にタイムアウトするようにします。

 timeout 15 ssh user@remoteMachine 'ping $HOSTNAME'

最後に、スクリプトが正しく機能し、コマンドに準拠しているかどうかをtimeoutテストした後です。

最後に、Linuxコマンドが準備され、pythonスクリプトを書くことができます。

python上記のコマンドを送信するための引数と引数を含むスクリプトを作成します。

引用符に注意してください:(try it)とは'動作が異なります。"

おすすめ記事