<div dir="ltr">Thank you for advice.<div>Yep, we should improve scripts.<br></div><div><br></div><div>Another tiny style.</div><div><br></div><div><div>diff -r 4d874b4d82ed src/core/ngx_cycle.c</div><div>--- a/src/core/ngx_cycle.c<span class="gmail-Apple-tab-span" style="white-space:pre">   </span>Thu Mar 16 20:38:31 2017 +0300</div><div>+++ b/src/core/ngx_cycle.c<span class="gmail-Apple-tab-span" style="white-space:pre">       </span>Sun Mar 19 00:59:36 2017 -0400</div><div>@@ -1046,7 +1046,6 @@</div><div>     }</div><div><br></div><div>     return ngx_os_signal_process(cycle, sig, pid);</div><div>-</div><div> }</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-03-19 5:22 GMT+08:00 Maxim Dounin <span dir="ltr"><<a href="mailto:mdounin@mdounin.ru" target="_blank">mdounin@mdounin.ru</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello!<br>
<div><div class="h5"><br>
On Sat, Mar 18, 2017 at 03:43:36PM +0800, 洪志道 wrote:<br>
<br>
> Hi.<br>
><br>
> It's easy to reproduce such problem that<br>
> the master/worker process are running without the pid file.<br>
><br>
> Step by step:<br>
><br>
> 1. Start master process.<br>
>     > ./objs/nginx<br>
>     nginx.pid successfully create with content (23234)<br>
><br>
> 2. Create an active connection, purpose for prevent previous master exit.<br>
>    > telnet 127.1 80<br>
><br>
> 3. Quit the previous master, and it still alive for a while.<br>
>    > kill -QUIT 23234<br>
><br>
> 4. Start new master process 23361, and the content of nginx.pid is changed<br>
> to 23361<br>
>    > ./objs/nginx<br>
>    It successfully start because of the listening port is closed by the<br>
> step 3.<br>
><br>
> 5. Wait for a while, and the nginx.pid is deleted while the old master<br>
> process (23234) completely quit.<br>
><br>
> Now the master process (23361) is running without nginx.pid.<br>
><br>
> So, there are two key points:<br>
> 1. Master start, I think there is not problem.<br>
> 2. Master Exit, is it better to add the pid check with the pid file?<br>
><br>
> Anyway, I think we should guarantee the pid file associates with the<br>
> running process.<br>
<br>
</div></div>By starting an additional nginx instance before the previous nginx<br>
has been exited you are looking for trouble anyway.  Starting<br>
additional instance can easily succeed even without using SIGQUIT<br>
to close listening sockets.  For example, nginx will happily start<br>
if you've changed listening socket to a different one, or use<br>
'listen .. reuseport'.<br>
<br>
Instead, you should check if there is previous instance of nginx<br>
running, and don't try to start another one while it is running<br>
(and this is what init scripts usually do).  Any other approach is<br>
very likely to result in various problems.<br>
<br>
Adding bandaids into nginx to mitigate most obvious of the<br>
resulting problems is possible, but I don't really think it's<br>
something needed.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Maxim Dounin<br>
<a href="http://nginx.org/" rel="noreferrer" target="_blank">http://nginx.org/</a><br>
______________________________<wbr>_________________<br>
nginx-devel mailing list<br>
<a href="mailto:nginx-devel@nginx.org">nginx-devel@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-devel" rel="noreferrer" target="_blank">http://mailman.nginx.org/<wbr>mailman/listinfo/nginx-devel</a></font></span></blockquote></div><br></div>