@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; }