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

时间:2018-09-28 02:33:56

标签: java linux reboot

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

  1. 我使用HandlerInterceptor's afterCompletion方法记录日志,因此可能无法成功记录日志;
  2. 在execute reboot命令中如果立即刷新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>
    

1 个答案:

答案 0 :(得分:0)

据我了解,如果要重新引导系统,您想将重新引导命令记录到数据库中,对吗? 如果是这种情况,则应在调用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);
    }