首页 > Windows开发 > 详细

Windows中nginx多次启动的问题

时间:2021-09-06 00:44:27      阅读:19      评论:0      收藏:0      [点我收藏+]

在Windows上做开发环境中的nginx服务器。为了使nginx在后台运行,使用如下命令来启停nginx:

cd <nginx安装目录>

# 开启nginx并在后台运行
start nginx.exe

# 关闭nginx
./nginx.exe -s stop

# 重启nginx:先关闭再开启
./nginx.exe -s stop; start nginx.exe

但是某次修改配置文件后,重启nginx,却发现根本没有生效。比如,把一个serverroot直接删了,重启后居然还能正常响应。

接着发现,执行nginx -s stop时已经提示没有nginx.pid了(这意味着nginx应该已经关闭了),但网页仍然能打开,这说明nginx实际上还在运行。

打开任务管理器查看进程,发现居然还有4个正在运行的nginx进程。正常情况下,nginx运行时应该只有2个nginx进程(1个master进程,1个worker进程(默认配置是1个)),而关闭时则没有nginx进程。

技术分享图片

所以原因很明显,是因为加载了旧配置的那批nginx进程一直都在运行,请求和响应一直都是被这批进程在处理,而加载了新配置的nginx进程虽然也运行起来了,但并没有得到处理请求的机会。

技术分享图片

经过实验发现,每执行一次start nginx,都会创建新的nginx进程,同时创建新的nginx.pid文件,但只有最先启动的nginx进程才会处理到请求

而如果多次使用./nginx.exe -s stop; start nginx.exe命令来重启,则总是会在某一次报出nginx.pid的错误,然后就看到nginx进程就变多了。猜想这是因为nginx -s stop命令并不是等到nginx关闭完成之后才执行结束,而仅仅是发送了一个系统信号,那么start nginx就会紧接着立即执行,创建新的nginx进程(会占用nginx.pid文件),而此时旧进程可能还没来得及关闭,然后就可能因为nginx.pid文件或其他某些因素导致旧进程没有关闭成功,于是就继续运行下去了。

所以,鉴于可能会出现此种问题,应该调整对nginx的启停管理的操作方式:

cd <nginx安装目录>

# 开启nginx并在后台运行
start nginx.exe

# 关闭nginx
nginx.exe -s stop

# 重载配置文件(不需要重启进程)
nginx.exe -s reload

# 重启nginx(仅在必须重启时才重启,再次启动前先确认已经关闭)
nginx.exe -s stop
start nginx.exe

Windows中nginx多次启动的问题

原文:https://www.cnblogs.com/youshilife/p/15227208.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!