функция остановки / перезагрузки компьютера из веб-приложения - PullRequest
0 голосов
/ 28 сентября 2018

Я использовал Runtime.getRuntime().exec("reboot") для перезагрузки компьютера, но есть две проблемы:

  1. Я использую метод HandlerInterceptor's afterCompletion для регистрации журнала, так что журнал может быть не записан успешно;
  2. В команде execute reboot Если вы немедленно обновите веб-приложение, вы сообщите, что база данных MySQL не подключена, поскольку веб-приложение еще не остановлено, но 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 голосов
/ 28 сентября 2018

Насколько я понимаю, вы хотите записать команду перезагрузки в базу данных на случай, если вы хотите перезагрузить систему, я прав?Если это так, то перед вызовом 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...