使用JSch执行命令

米奇

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

修改JSch软件包中包含的Shell.java示例,我已经成功安装了JSch,连接到我的Pi,甚至注释掉了user / domain / password / host键检查提示框,以便将这些值直接存储在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

马丁·普里克里(Martin Prikryl)

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

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

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

有关完整代码,请参见如何读取JSch命令输出?–其中显示了如何同时正确读取标准输出和错误输出,如何使命令完成并收集包括错误在内的所有输出的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章