我使用JSch自动从后台Java进程远程启动python脚本。
修改JSch包中包含的Shell.java示例,我已经成功安装了JSch,连接到我的Pi,甚至注释掉了用户/域/密码/主机密钥检查提示框,有利于存储这些值直接在我的Java代码中。
我的java代码登录到远程Pi后,我希望发送类似
的内容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
答案 0 :(得分:2)
你选错了一个例子。 " shell" channel用于实现交互式shell会话,而不是用于自动执行命令。
使用" exec"频道,请参阅Exec.java
example。
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
channel.connect();
...