2017-02-13 250 views
1

我正在使用JSch從後臺Java進程遠程啓動python腳本。使用JSch執行命令

修改JSch包中包含的Shell.java示例,我已成功安裝JSch,連接到我的Pi,甚至註釋掉用戶/域/密碼/主機密鑰檢查提示框,以便存儲這些值直接在我的Java代碼中。

我的Java代碼登錄到遠程皮後,我想它來發送類似

sudo nohup python2 myFoo.py & disown 

到終端。

在Shell.java示例我修改,我看到重定向通道對象的輸入和輸出流的代碼行以System.inSystem.out但我想簡單地手動上述線注入所述遠程終端並斷開連接。

爲什麼/我的目標是:
我有一個Pi的小網狀網絡,在一天中的大部分時間都運行腳本。 我想消除停機時間,但代碼有時會在連續循環3-4天后停止工作(有時在代碼錯誤出現和停止之前,只要一個星期)。
在每個節點上運行的腳本使用「上次簽入」字段更新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

你選擇了一個錯誤的榜樣。 「shell」通道用於實現交互式shell會話,而不是用於自動執行命令。

使用 「EXEC」 頻道,看到Exec.java example

Channel channel=session.openChannel("exec"); 
((ChannelExec)channel).setCommand(command); 
channel.connect(); 
...