使用 JSch 执行命令

Executing a command using 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,但我想要只需手动将上面的行注入远程终端并断开连接。

Why/my 目标:
在一天的大部分时间里,我有一个由 Pi 运行 宁宁脚本组成的小型网状网络。 我想消除停机时间,但代码有时会在连续循环 3-4 天后停止工作(有时长达一周,然后代码就会出错并停止)。
每个节点上的脚本 运行ning 使用 "last check in" 字段更新 mySQL 数据库。
我希望在 Java 中编写一个小的后台程序,它将在我的服务器上无限期地 运行 ,时不时地检查每个站的 "last check in" ,如果它注意到一个节点去下来,远程 ssh 进入它并 sudo reboot now,等待大约 60-100 秒,然后 sudo nohup python2 myFoo.py & disown

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

使用“exec”频道,查看Exec.java example

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

有关完整代码,请参阅 How to read JSch command output? – 它展示了如何 正确地 同时读取标准和错误输出,以允许命令完成并收集所有输出包括错误。