使用JSch执行命令
问题描述:
我正在使用JSch从后台Java进程远程启动python脚本。使用JSch执行命令
修改JSch包中包含的Shell.java示例,我已成功安装JSch,连接到我的Pi,甚至注释掉用户/域/密码/主机密钥检查提示框,以便存储这些值直接在我的Java代码中。
我的Java代码登录到远程皮后,我想它来发送类似
sudo nohup python2 myFoo.py & disown
到终端。
在Shell.java示例我修改,我看到重定向通道对象的输入和输出流的代码行以System.in
和System.out
但我想简单地手动上述线注入所述远程终端并断开连接。
为什么/我的目标是:
我有一个Pi的小网状网络,在一天中的大部分时间都运行脚本。 我想消除停机时间,但代码有时会在连续循环3-4天后停止工作(有时在代码错误出现和停止之前,只要一个星期)。
在每个节点上运行的脚本使用“上次签入”字段更新mySQL数据库。
我希望用Java编写一个小的后台程序,将我的服务器上运行下去,勾选“在最后一次检查”为每个站飘飞,如果它注意到一个节点下去,远程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();
...
您可以直接写入到输出流,就像你会为一个文件,我们的插座,从输入流读取同样的方式 – MadProgrammer
[这个例子](http://stackoverflow.com/questions/20560240/send-command-via-ssh-and-read-ouput-results/20560773#20560773)可能有帮助 – MadProgrammer