| | |
| | | package org.example.controller; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.example.WsServerApplication; |
| | | import org.example.common.ServerResponse; |
| | | import org.example.pojo.User; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.io.BufferedReader; |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.io.InputStreamReader; |
| | | |
| | | @RestController |
| | | @RequestMapping("/api") |
| | |
| | | return ServerResponse.createBySuccess("重启成功"); |
| | | } |
| | | |
| | | |
| | | @PostMapping("/resetScript") |
| | | @ResponseBody |
| | | public ServerResponse resetScript(HttpServletRequest request,@RequestParam("pathName") String pathName) { |
| | | if(StringUtils.isEmpty(pathName)){ |
| | | return ServerResponse.createByErrorMsg("执行项目不能为空"); |
| | | } |
| | | String token = request.getHeader("token"); |
| | | User user = JwtUtil.verify(token); |
| | | if(user.getIsRoot() != 1){ |
| | | return ServerResponse.createByErrorMsg("没有重启权限"); |
| | | } |
| | | String scriptPath = "/www/wwwroot/sh/"+pathName+".sh"; |
| | | log.info(pathName+"开始重启"); |
| | | |
| | | // 创建 ProcessBuilder 实例 |
| | | ProcessBuilder processBuilder = new ProcessBuilder(); |
| | | |
| | | // 确保脚本具有执行权限 |
| | | File scriptFile = new File(scriptPath); |
| | | if (!scriptFile.canExecute()) { |
| | | log.error(pathName+"脚本没有执行权限"); |
| | | } |
| | | |
| | | // 设置命令,指定 shell 来执行脚本 |
| | | // 假设使用的是 Linux 系统 |
| | | processBuilder.command("/bin/bash", scriptPath); // 你也可以使用 "/bin/sh" 作为替代 |
| | | |
| | | try { |
| | | // 启动进程 |
| | | Process process = processBuilder.start(); |
| | | |
| | | // 读取脚本的标准输出 |
| | | BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); |
| | | String line; |
| | | while ((line = reader.readLine()) != null) { |
| | | log.info(line); |
| | | } |
| | | |
| | | // 读取脚本的标准错误输出 |
| | | BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream())); |
| | | String errorLine; |
| | | while ((errorLine = errorReader.readLine()) != null) { |
| | | log.info(errorLine); |
| | | } |
| | | |
| | | // 等待脚本执行完毕 |
| | | int exitCode = process.waitFor(); |
| | | log.info(pathName+"脚本执行完毕,退出码:" + exitCode); |
| | | |
| | | // 如果脚本执行失败,exitCode 可能为非零 |
| | | if (exitCode != 0) { |
| | | return ServerResponse.createByErrorMsg(pathName+"重启失败"); |
| | | } |
| | | return ServerResponse.createBySuccess(pathName+"重启成功"); |
| | | } catch (IOException | InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return ServerResponse.createByErrorMsg(pathName+"重启失败"); |
| | | } |
| | | |
| | | } |