windows 使用 nssm 对 nginx 自启动异常问题处理

上一篇:https://blog.csdn.net/hefeng_aspnet/article/details/149174413 

问题描述 

启动总是提示失败:

Error setting up one or more I/O filehandles. Service nginx-1.21.5 will not be started.

还有警告:Service nginx-1.21.5 action for exit code 3221225794 is Restart. Attempting to restart D:\nginx-1.21.5\nginx.exe.

logs目录也没有异常日志信息:

于是开始查找Windows错误日志: 

错误如下:  

Error setting up one or more I/O filehandles.  Service nginx-1.21.5 will not be started.

第二个异常如下: 

Error duplicating the filehandle previously opened for STD_INPUT_HANDLE as stdin. DuplicateHandle() failed: 句柄无效。

解决方法

        这个错误表明Nginx服务在Windows系统下无法启动,主要原因是I/O文件句柄设置失败。以下是系统化的解决方案,本文使用文件句柄冲突验证解决

一、核心问题诊断

‌日志文件权限检查‌

确保Nginx日志目录(默认logs/)有写入权限:

右键目录→属性→安全→添加SYSTEM和Users的完全控制权限

若使用自定义日志路径,需同步检查对应目录权限

‌文件句柄冲突验证‌

通过资源监视器检查nginx.exe是否被其他进程锁定:

resmon.exe → CPU选项卡 → 关联的句柄搜索"nginx"

右键结束进程或进程树: 

二、关键配置修正

‌配置文件路径标准化‌

在nginx.conf中确保所有路径使用正斜杠且无中文/空格:

error_log  C:/nginx/logs/error.log;
access_log C:/nginx/logs/access.log;

绝对路径可避免相对路径引发的歧义

‌工作目录设置‌

在NSSM服务配置中:

设置Startup directory为Nginx安装目录(如C:\nginx)
确保Application path指向完整可执行文件路径

三、服务注册修复

‌NSSM服务重装‌

管理员CMD执行:

nssm remove nginx-1.21.5
nssm install nginx-1.21.5 "C:\nginx\nginx.exe"
nssm set nginx-1.21.5 AppDirectory "C:\nginx"

‌日志重定向配置‌

在NSSM的Log on选项卡:

勾选Capture stdout和Capture stderr

指定日志输出文件路径

四、深度调试方案

‌手动启动测试‌

在Nginx目录下执行:

start nginx -e C:\nginx\logs\debug.log

观察debug.log中的详细错误信息

‌系统事件查看‌

通过eventvwr.msc查看Windows系统日志:

筛选Application日志源为nginx或nssm

重点关注错误代码0x20(文件句柄冲突)

五、配置文件错误排查

‌检查语法错误‌

执行 nginx -t 验证配置文件语法,错误会显示具体行号

本文配置文件语法正常 

‌关键配置项检查‌

确保worker_processes数值不超过CPU核心数

检查listen端口是否冲突(如80/443) 

六、预防措施

‌版本兼容性检查‌

建议使用Nginx Windows稳定版(如1.20.1),某些新版可能存在句柄管理缺陷

‌防病毒软件排除‌

将Nginx目录添加到杀毒软件的白名单,避免实时扫描干扰

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值