Opened 8 years ago
Closed 8 years ago
#1047 closed defect (duplicate)
listening unix sockets not removed on graceful shutdown
Reported by: | Owned by: | ||
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | other | Version: | 1.10.x |
Keywords: | Cc: | ||
uname -a: | Linux kiryu 4.6.0-1-amd64 #1 SMP Debian 4.6.4-1 (2016-07-18) x86_64 GNU/Linux | ||
nginx -V: |
nginx version: nginx/1.10.1
built with OpenSSL 1.0.2h 3 May 2016 TLS SNI support enabled configure arguments: --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module --add-dynamic-module=/build/nginx-1.10.1/debian/modules/nginx-auth-pam --add-module=/build/nginx-1.10.1/debian/modules/nginx-dav-ext-module --add-module=/build/nginx-1.10.1/debian/modules/nginx-echo --add-module=/build/nginx-1.10.1/debian/modules/nginx-upstream-fair --add-module=/build/nginx-1.10.1/debian/modules/ngx_http_substitutions_filter_module |
Description
When running nginx with a listener on a unix socket:
listen unix:/var/run/nginx.sock;
The socket is correctly created when nginx starts, but is not removed when a graceful shutdown is requested via SIGQUIT signal. This results in subsequent attempts to start nginx to result in the following error:
bind() to unix:/var/run/nginx.sock failed (98: Address already in use)
Oddly enough, when nginx is stopped with a SIGTERM signal ("shut down quickly" according to the manpage) the socket is removed.
The result of this is that additional effort must be made to cleanup the socket outside of the nginx process when using "graceful shutdown." As a side-effect init scripts provided by downstream distributions may fail to correctly handle restarts in some configurations.
It would seem, to me at least, that the "graceful" shutdown method should make a best attempt to cleanup all ephemeral resources used by the master and children processes; the "shutdown quickly" method perhaps not so much.
Change History (3)
comment:1 by , 8 years ago
comment:2 by , 8 years ago
It seems this is a duplicate of #753 which has been accepted already. Please merge/close this issue.
comment:3 by , 8 years ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
I found this downstream Debian bug:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=821111
Which seems to indicate that graceful shutdown is not the intended method to shutdown nginx per, some unnamed, nginx maintainer. I suppose if that is true then this is a documentation bug and not a behavior bug.
Is perhaps the solution to fully document what the expected behavior is of the various signal handlers. I don't know that the current shorthand of "quickly" vs. "gracefully" accurately matches the expectations of an average user.