在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多次启动的问题的更多相关文章

  1. sublime text2在windows中以命令行启动

    sublime text2在windows中以命令行启动   把执行文件添加到PATH中即可,如图: 如果你和我一样习惯了mac下的简写subl,那么需要在程序目录中新建一个批处理文件subl.bat ...

  2. Windows中Nginx配置nginx.conf不生效解决方法(路径映射)

    Windows中Nginx配置nginx.conf不生效解决方法 今天在做Nginx项目的时候,要处理一个路径映射问题, location /evaluate/ { proxy_pass http:/ ...

  3. 【记录】解决windows中nginx明明退出了,为什么还能反向代理?CMD强制杀死进程命令

    博主今天遇到一个很奇怪的问题,nginx在windows中明明已经退出了,而且在任务管理器中也没发现nginx进程, 为什么还能反向代理呢? 找了半天资料终于解决,现记录如下,希望能帮助到你. 步骤一 ...

  4. Windows 安装nginx并开机启动

    Win安装nginx并 开机启动 下载nginx安装包 nginx-1.12.2.zip,解压到D盘. https://pan.baidu.com/s/1InQa527yq35Q68c73RBb-A# ...

  5. windows中的oracle12SE后启动的系统服务的列表

    下图是我安装在windows 10下安装好oracle12.10SE之后的启动的系统服务的列表. 通常,我是将其全部修改为手动启动.当需要用oracle服务的时候,只需要启动对应的实例的服务和tnsl ...

  6. Windows中通过命令行启动打开Service 管理工具

    经常需要打开Services 管理工具操控Service 的启动,停止. 通过控制面板 --> 管理工具 -->Service  太慢. 学到一个快捷方式. windows + R  启动 ...

  7. Windows中Nginx配置nginx.conf不生效解决方法

    转:https://lucifer.blog.csdn.net/article/details/83860644?utm_medium=distribute.pc_relevant.none-task ...

  8. windows下nginx的启动关闭

    Windows下Nginx的启动.停止等命令 在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动.停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍. .启 ...

  9. Windows下Nginx的启动、停止等命令

    Windows下Nginx的启动.停止等命令 在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动.停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍.1.启 ...

随机推荐

  1. JavaScript实现,判断一个点是否在多边形内(简直nice,希望能帮到你)

    //定义点的结构体 function point(){ this.x=0; this.y=0; } //计算一个点是否在多边形里,参数:点,多边形数组 function PointInPoly(pt, ...

  2. 月薪60k,仍无人问津,腾讯阿里到底有多缺这类程序员?

    不知道大家发现没,近几年,国内对音视频人才需求越来越大了,在某招聘网站上居然薪酬高达60k. 从未来的大趋势来看,随着5G时代的到来,音视频慢慢变成人们日常生活中的必须品.除了在线教育.音视频会议.即 ...

  3. TextLineCodecFactory笔记

    Mina的TextLineCodecFactory将字符串编码为字节流,将字节流解码为字符串,下面是使用中遇到的两个问题. TextLineCodecFactory改变了message的类型 acce ...

  4. WPF自定义控件三:消息提示框

    需求:实现全局消息提示框 一:创建全局Message public class Message { private static readonly Style infoStyle = (Style)A ...

  5. MaterialDesign Or ComboBox 联动查询

    <ComboBox Width="200" Height="30" x:Name="ComboxName" Text="{B ...

  6. Golang语言系列-14-单元测试

    单元测试 字符串切割函数 package split_string import ( "fmt" "strings" ) // Split:切割字符串 // e ...

  7. STM32—位带操作

    STM32中的位带操作: 名字为位带操作,实际上是对位的操作,位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常常见. 51 单片机中通过关键字 sbit 来实现位定义, STM32 ...

  8. 题解 Hunter

    传送门 一看这题subtasks就觉得最后能直接推个柿子出来--然而没推出来 首先状压的部分分:发现只需要统计猎人1还没死的状态的贡献,其它情况可以continue掉,有45pts 至于正解--发现我 ...

  9. C#比较两个对象是否为同一个对象。 Visual Studio调试器指南---多线程应用程序调试(一)

    两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存. 1.使用object.ReferenceEquals() class Program { static void Main(strin ...

  10. vsftpd - FTP 服务器安装

    由于要将本地程序上传至云服务器中,所以需要给云服务器端安装ftp服务器.记录一下ftp的安装过程,以便以后使用.服务器端所用系统为Ubuntu16.04. 1. 安装ftp服务器, apt-get i ...