Windows上的nginx停止失败,因为Access被拒绝

Windows,在cmd窗口使用命令nginx.exe -s stop停止nginx,报以下错误:
nginx: [error] OpenEvent(“Global\ngx_stop_15792”) failed (5: Access is denied)

在这里插入图片描述

1、报错使用场景

主要是想通过Java做一个Windows的控制面板,来控制这些中间件的开启和停止;
Java代码执行nginx.exe -s stop和cmd窗口执行报错一致。

2、异常原因

从异常的信息中可以看到是访问被拒绝,是权限不足,然后使用管理员运行cmd窗口,再次使用nginx命令,即可打开nginx服务。

3、解决方案

Windows关闭nginx的操作主要有以下几种,由于我是代码操作,所以使用的是第三种解决方法。

1、任务管理器

Ctrl + Alt + Del 键打开任务管理器面板,点击对应的nginx.exe进程(多个),结束相关任务即可。
在这里插入图片描述

2、cmd命令查询nginx.exe进程号,逐个进行杀进程操作
  • Win + R键打开cmd窗口,输入tasklist | findstr nginx.exe命令,查询正在运行的nginx进程;
  • 然后再使用taskkill /PID <PID> /F杀死Nginx进程 将PID替换为你要杀死的Nginx进程的PID。例如,如果Nginx进程的PID是19452,那么命令将是下面那个图;
  • 注意:正常情况下,nginx运行时应该只有2个nginx进程
    (1个master进程,1个worker进程(默认配置是1个))。

在这里插入图片描述

3、Java代码层面,使用的也是杀进程的原理

根据进程名来杀掉nginx即可,
如果权限够执行stop命令的可以使用代码段2。

代码段1

private static void stopNginx() {
   try {
       // 停止Nginx服务的命令
       String nginxProcessName = "nginx.exe";
       String taskKillCommand = "taskkill /F /IM " + nginxProcessName;
       Process taskKillProcess = Runtime.getRuntime().exec(taskKillCommand);
       int taskKillExitCode = taskKillProcess.waitFor();
       System.out.println("Nginx服务已停止");
   } catch (IOException | InterruptedException e) {
       e.printStackTrace();
   }
}

代码段2
nginx.exe -s stop

private static void stopNginx() {
    try {
        // 停止Nginx服务的命令
        String nginxCommand = "F:\\programming\\gaoshan\\innosetup\\workspace\\nginx-1.22.1\\nginx.exe -s stop";
        Process nginxProcess = Runtime.getRuntime().exec(nginxCommand);
        int nginxExitCode = nginxProcess.waitFor();
        System.out.println("Nginx服务已停止");
    } catch (IOException | InterruptedException e) {
        e.printStackTrace();
    }
}
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐