Java 使用JSch执行命令

Java 使用JSch执行命令,java,python,ssh,raspbian,jsch,Java,Python,Ssh,Raspbian,Jsch,我使用JSch从后台Java进程自动远程启动python脚本 通过修改JSch包中包含的Shell.java示例,我成功地安装了JSch,连接到我的Pi,甚至注释掉了user/domain/password/host key检查提示框,以便将这些值直接存储在java代码中 在我的java代码登录到远程Pi之后,我希望它发送如下内容 sudo nohup python2 myFoo.py & disown 到终点站 在我正在修改的Shell.java示例中,我看到一行行代码将通道对象的输

我使用JSch从后台Java进程自动远程启动python脚本

通过修改JSch包中包含的Shell.java示例,我成功地安装了JSch,连接到我的Pi,甚至注释掉了user/domain/password/host key检查提示框,以便将这些值直接存储在java代码中

在我的java代码登录到远程Pi之后,我希望它发送如下内容

sudo nohup python2 myFoo.py & disown
到终点站

在我正在修改的Shell.java示例中,我看到一行行代码将通道对象的输入和输出流重定向到
System.In
System.out
,但我只想手动将这行代码注入远程终端并断开连接

为什么/我的目标:
我有一个Pi的小网状网络,每天大部分时间都在运行脚本。 我希望消除停机时间,但代码有时会在连续循环3-4天后停止工作(有时长达一周,然后代码就会出现错误并停止)。
每个节点上运行的脚本都会使用“上次签入”字段更新mySQL数据库。

我希望用Java编写一个小的后台程序,在我的服务器上无限期运行,不时检查每个站点的“最后一次签入”,如果它注意到某个节点发生故障,则远程ssh到该节点,然后立即重新启动sudo,等待大约60-100秒,然后
sudo nohup python2 myFoo.py&disown

您选择了一个错误的示例。“shell”通道用于实现交互式shell会话,而不是自动执行命令

使用“exec”频道,请参阅

有关完整代码,请参阅–其中显示了如何同时正确读取标准输出和错误输出,以允许命令完成并收集包括错误在内的所有输出

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