使用 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.in
和 System.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? – 它展示了如何 正确地 同时读取标准和错误输出,以允许命令完成并收集所有输出包括错误。
我正在使用 JSch 从后台 Java 进程自动远程启动 python 脚本。
修改JSch包中的Shell.java示例,我已经成功安装JSch,连接到我的Pi,甚至注释掉了user/domain/password/host关键检查提示框以支持存储这些值直接在我的 Java 代码中。
在我的 java 代码登录到远程 Pi 后,我希望它发送类似
的内容sudo nohup python2 myFoo.py & disown
到航站楼。
在我正在修改的 Shell.java 示例中,我看到代码行将通道对象的输入和输出流重定向到 System.in
和 System.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? – 它展示了如何 正确地 同时读取标准和错误输出,以允许命令完成并收集所有输出包括错误。