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

问题描述 投票:0回答:2

我使用

Runtime.getRuntime().exec("reboot")
重新启动电脑,但有两个问题:

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

    @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>
    
java linux reboot
2个回答
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);
    }

0
投票
if (num == 1) {
        LogService.LogRebootEvent(); 
        NetWorkService.rebootSystem();
    } else if (num == 0) {
        NetWorkService.shutdownSystem();
    } else if (num == 2) {
        NetWorkService.rebootNetwork();
    } else {
        return new JsonObj(false);
    }
© www.soinside.com 2019 - 2024. All rights reserved.