2017-02-13 20 views
1

私はJSchを使用して、バックグラウンドJavaプロセスからPythonスクリプトをリモートで起動しています。JSchを使用してコマンドを実行する

JSchパッケージに含まれているShell.javaの例を変更して、自分のPiに接続されたJSchを正常にインストールしました。これらの値を保存するためのユーザー/ドメイン/パスワード/直接私のJavaコードで。リモートパイへの私のJavaコードログインした後

、私はそれが端末に

sudo nohup python2 myFoo.py & disown 

のようなものを送りたいです。

私が修正しているShell.javaの例では、チャネルオブジェクトの入力ストリームと出力ストリームをSystem.inSystem.outにリダイレクトするコード行がありますが、リモート端末にその行を手動で注入したいと思います切断します。

なぜ/私の目標:
私はほとんどの日にスクリプトを実行しているPiの小さなメッシュネットワークを持っています。 私はダウンタイムを排除したいと思っていますが、3-4日間ループすると(時にはコードがバグアウトして停止する直前に1週間かかることもあります)、コードが動作しなくなることがあります。
各ノードで実行されているスクリプトは、「最後のチェックイン」フィールドを使用してmySQLデータベースを更新します。
Javaで小さなバックグラウンドプログラムを書いて、サーバで無期限に実行して、各ステーションの「最後のチェックイン」を今すぐチェックし、ノードがダウンしたことに気づいたら、リモートでsshを実行することを望んでいますsudo reboot now、約60〜100秒待ってからsudo nohup python2 myFoo.py & disown

+0

あなたはちょうどあなたがファイルたちのソケットと入力から読み込むために同じよう – MadProgrammer

+0

[この例](http://stackoverflow.com/questions/20560240をストリーミングするのと同じように、出力ストリームに直接書き込むことができます/ send-command-via-ssh-and-read-ouput-results/20560773#20560773)が役立つ可能性があります – MadProgrammer

答えて

0

間違った例を選んだ。 「シェル」チャネルは、コマンド実行の自動化ではなく、インタラクティブシェルセッションを実装するためのチャネルです。

「exec」チャネルを使用してください(Exec.java exampleを参照)。

Channel channel=session.openChannel("exec"); 
((ChannelExec)channel).setCommand(command); 
channel.connect(); 
... 
関連する問題