使用JSch执行命令

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

修改JSch包中包含的Shell.java示例,我已经成功安装了JSch,连接到我的Pi,甚至注释掉了用户/域/密码/主机密钥检查提示框,支持将这些值直接存储在我的Java中码。

在我的java代码登录到远程Pi后,我希望它发送类似的东西

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

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

使用“exec”通道,请参阅Exec.java示例 。

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