2017-02-13 211 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(); 
...