从 Web 应用程序停止/重新启动计算机的功能



我用Runtime.getRuntime().exec("reboot")重新启动计算机,但有两个问题:

  1. 我使用HandlerInterceptor'safterFill 方法记录日志,这样日志可能无法成功记录;
  2. 在执行重启命令中 如果立即刷新 Web 应用程序,您将报告 MySQL 数据库未连接,因为 Web 应用程序尚未停止,但 MySQL 首先收到重启信号并停止。 你有什么好的建议吗?

    @RequestMapping(value = "system_set", method = RequestMethod.POST)
    @AccessLog(value = "操作计算机", additional = {"{0=关闭计算机,1=重启计算机,2=关闭网卡}"})
    @ResponseBody
    public JsonObj sysOper(@RequestParam Integer num) {
    // 1:重启计算机/0:关闭计算机/2:关闭网卡
    if (num == 1) {
    NetWorkService.rebootSystem();
    } else if (num == 0) {
    NetWorkService.shutdownSystem();
    } else if (num == 2) {
    NetWorkService.rebootNetwork();
    } else {
    return new JsonObj(false);
    }
    return new JsonObj(true);
    }
    
    public static void rebootSystem() {
    String execCommand =  "reboot";
    try {
    Runtime.getRuntime().exec(execCommand);
    } catch (IOException e) {
    logger.error("failed reboot system", e);
    }
    }
    
    
    <mvc:interceptor>
    <mvc:mapping path="/**"></mvc:mapping>
    <mvc:exclude-mapping path="/static/**" ></mvc:exclude-mapping>
    <bean class="cn.com.web.interceptors.AccessLogger" />
    </mvc:interceptor>
    

据我了解,如果您想重新启动系统,您想将重新启动命令记录到数据库中,我是对的吗? 如果是这种情况,那么您应该在调用 NetWorkService.rebootSystem(( 之前编写自定义代码以记录到数据库; 类似的东西会做:

if (num == 1) {
LogService.LogRebootEvent(); 
NetWorkService.rebootSystem();
} else if (num == 0) {
NetWorkService.shutdownSystem();
} else if (num == 2) {
NetWorkService.rebootNetwork();
} else {
return new JsonObj(false);
}

最新更新