Windows系统非正常关机nginx报错:nginx: [error] OpenEvent("Global\ngx_stop_20448") failed (2: The system cannot find the file specified)

时间:2024-03-07 15:38:50

我遇见的问题较多,前面是处理过程,后面是解决方案

昨天电脑自动关机了,而nginx并没有关机。

早上我输入停止nginx命令,报错

D:\tools\nginx-1.8.0>nginx -s stop
nginx: [error] OpenEvent("Global\ngx_stop_20448") failed (2: The system cannot find the file specified)

 

系统找不到指定的文件,那我就启动nginx

D:\tools\nginx-1.8.0>nginx.exe
nginx: [emerg] bind() to 0.0.0.0:9001 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

试图以其访问权限禁止的方式访问套接字,有人说这个是9001端口被占用了

 

尝试杀死PID 9001端口

D:\tools\nginx-1.8.0>taskkill  /f  /pid 9001
错误: 没有找到进程 "9001"。

提示没有这个进程,意思是9001端口没有被占用

任务管理器PID中没有9001

 

查看机器端口占用情况

D:\tools\nginx-1.8.0>netstat -ano

活动连接

协议    本地地址                 外部地址                状态              PID
TCP    0.0.0.0:25             0.0.0.0:0              LISTENING       12916

.........

TCP    0.0.0.0:9001           0.0.0.0:0              LISTENING       4

.........

提示PID为4

 

查看指定端口情况

D:\tools\nginx-1.8.0>netstat -ano | findstr "9001"
  TCP    0.0.0.0:9001           0.0.0.0:0              LISTENING       4
  TCP    [::]:9001              [::]:0                 LISTENING       4
C:\Users\oor>netstat -ano | findstr 0.0.0.0:9001
  TCP    0.0.0.0:9001           0.0.0.0:0              LISTENING       4

提示TCP端口为9001

 

尝试杀死TCP 9001端口

D:\tools\nginx-1.8.0>sudo fuser -k 9001/tcp
\'sudo\' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

都不对,到此有点糊涂了,所以换一种方式

 

使用netsh命令查看下现用的http端口配置

查看HTTP 服务状态快照(服务器会话视图):

D:\tools\nginx-1.8.0>netsh http show servicestate

HTTP 服务状态快照(服务器会话视图):
-----------------------------------------------------

服务器会话 ID: FF00000120000001
版本: 2.0
状态: Active
属性:
最大带宽: 4294967295
超时:
实体正文超时(秒): 120
耗尽实体正文超时(秒): 120
请求队列超时(秒): 120
空闲连接超时(秒): 120
标头等待超时(秒): 120
最小发送速率(字节/秒): 150
URL 组:
URL 组 ID: FE00000140000001
状态: Active
请求队列名称: 请求队列尚未命名。
属性:
最大带宽: 已继承
最大连接数: 已继承
超时:
继承的超时值
已注册的 URL 数目: 1
已注册的 URL 数目:
HTTP://+:9001/IGCC/SERVICE/

请求队列:
请求队列名称: 请求队列尚未命名。
版本: 2.0
状态: Active
请求队列 503 详细级别: 基本
最大请求数目: 1000
附加活动进程数目: 1
进程 ID:
4908

 

果真找到了PID:4908

 看到上图的结果,恍然大悟!如果大家不确定那是一个什么进程,我们对它右键 - 打开文件所在位置

 

最后去任务管理器结束任务

 

查看当前 9001 端口占用情况

D:\tools\nginx-1.8.0>netstat -ano | findstr 0.0.0.0:9001

D:\tools\nginx-1.8.0>

 

启动nginx 成功了

 

 

再次重启电脑 启动nginx 失败了

D:\tools\nginx-1.8.0>nginx.exe
nginx: [emerg] bind() to 0.0.0.0:9001 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

 

使用netsh命令查看下现用的http端口配置

C:\Users\oor>netsh http show servicestate

HTTP 服务状态快照(服务器会话视图):
-----------------------------------------------------

服务器会话 ID: FF00000520000001
    版本: 2.0
    状态: Active
    属性:
        最大带宽: 4294967295
        超时:
            实体正文超时(秒): 120
            耗尽实体正文超时(秒): 120
            请求队列超时(秒): 120
            空闲连接超时(秒): 120
            标头等待超时(秒): 120
            最小发送速率(字节/秒): 150
    URL 组:
    URL 组 ID: FF00000340000001
        状态: Active
        请求队列名称: 请求队列尚未命名。
        属性:
            最大带宽: 已继承
            最大连接数: 已继承
            超时:
                继承的超时值
            已注册的 URL 数目: 1
            已注册的 URL 数目:
                HTTP://+:9001/IGCC/SERVICE/

服务器会话 ID: FE00000320000001
    版本: 2.0
    状态: Active
    属性:
        最大带宽: 4294967295
        超时:
            实体正文超时(秒): 120
            耗尽实体正文超时(秒): 120
            请求队列超时(秒): 120
            空闲连接超时(秒): 120
            标头等待超时(秒): 120
            最小发送速率(字节/秒): 150
    URL 组:
    URL 组 ID: FD00000340000001
        状态: Active
        请求队列名称: 请求队列尚未命名。
        属性:
            最大带宽: 已继承
            最大连接数: 已继承
            超时:
                继承的超时值
            已注册的 URL 数目: 1
            已注册的 URL 数目:
                HTTP://*:5357/FF8A2E73-5DEE-4C79-926C-7D4EE1425F13/

请求队列:
    请求队列名称: 请求队列尚未命名。
        版本: 2.0
        状态: Active
        请求队列 503 详细级别: 基本
        最大请求数目: 1000
        附加活动进程数目: 1
        进程 ID:
            4700

    请求队列名称: 请求队列尚未命名。
        版本: 2.0
        状态: Active
        请求队列 503 详细级别: 基本
        最大请求数目: 1000
        附加活动进程数目: 1
        进程 ID:
            12320

由于重开机多次了,都是这个问题,我真想重新安装nginx,够头疼一会儿的了

已注册的 URL 数目:
                HTTP://*:5357/FF8A2E73-5DEE-4C79-926C-7D4EE1425F13/

 这个又是什么鬼?

问题描述:

  端口被系统system,pid[4] 占用的,无法使用两步走的传统常用命令解决,即:

  netstat -ano|findstr "端口号"
  taskkill /pid [查询的pid] -F

C:\Users\oor>netstat -ano|findstr "9001"
  TCP    0.0.0.0:9001           0.0.0.0:0              LISTENING       4
  TCP    [::]:9001              [::]:0                 LISTENING       4

C:\Users\oor>netstat -ano|findstr "5357"
  TCP    0.0.0.0:5357           0.0.0.0:0              LISTENING       4
  TCP    [::]:5357              [::]:0                 LISTENING       4

C:\Users\oor>taskkill /pid [4] -F
错误: 没有找到进程 "[4]"。

 

输入 tasklist|findstr "pid" 查看占用端口号的应用程序

C:\Users\oor>tasklist|findstr "4700"
OneApp.IGCC.WinService.ex     4700 Services                   0     36,380 K

C:\Users\oor>tasklist|findstr "12320"
svchost.exe                  12320 Services                   0      9,736 K

 

打开config文件

 

 

 

 

有人博主说更改端口号有效,后来证明也无效

 

 最后我拧不过它了,直接更改nginx端口号

 

 把端口号9001更改为9101

 

启动nginx多次,证明有效

 

更改前端URL配置

 

 

 如果不改就会报错

errError: Network Error

 

 

 

保存并执行

npm run dev

 

成功了

 参考博文【解决了我的部分问题】

Windows 下 80 端口被进程 System & PID=4 占用的解决方法