java执行本地或远程shell脚本

@RequestMapping("/execInOrOffShell")
@ResponseBody
public ResultInfo execInOrOffShell(@RequestBody FilebeatModel filebeatModel) {
   ResultInfo resultInfo = ResultInfo.success();
   try {
     //startShell :sh脚本所在目录
      String execString = startShell + " " + filebeatModel.getIp() + " ";
      if (filebeatModel.getStatusflag() == 0) {
         execString = execString + "start";
         filebeatModel.setStatusflag(0);
      } else {
         execString = execString + "stop";
         filebeatModel.setStatusflag(1);
      }
      System.out.println("execString---" + execString);
      //执行本地脚本的方式
      //Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", execString});
      //执行远程脚本的方式
      int inOrOffCode =  executor.exec(execString);
      System.out.println("inOrOffCode---" + inOrOffCode);
      if(inOrOffCode == -9){
         resultInfo = ResultInfo.fail("执行脚本发生未知错误!!!");
         logger.error("执行脚本发生未知错误!!!");
      }else{
         //存库
         filebeatModel.setUpdatetime(new Timestamp(System.currentTimeMillis()));
         filebeatService.updateFilebeatModel(filebeatModel);
      }
   } catch (Exception e) {
      resultInfo = ResultInfo.fail("execStartShell error cause by:" + e);
      logger.error("execStartShell error cause by:" + e);
   }
   return resultInfo;
}
/**
 * 执行脚本
 *
 * @param cmds
 * @return
 * @throws Exception
 */
public int exec(String cmds) {
   int ret = -9;
   try {
      JSch jsch = new JSch();
      jsch.addIdentity(publicKeyPath);
      jsch.setKnownHosts(knownHosts);
      Session session = jsch.getSession(loginName, ip, port);
      //如果服务器连接不上,则抛出异常
      if (session == null) {
         logger.error("session is null");
      }
      session.setConfig("StrictHostKeyChecking", "no");
      session.connect();
      Channel channel = session.openChannel("exec");
      ((ChannelExec) channel).setCommand(cmds);
      channel.connect();
      //因为要等返回码返回,所以停2秒
      Thread.sleep(2000);
      ret = channel.getExitStatus();
      channel.disconnect();
      session.disconnect();
   } catch (Exception e) {
      logger.error("exec error cause by:" + e);
      return ret;
   }
   return ret;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值