Is there any way to detect when nginx has completed a graceful shutdown?
        Posted  
        
            by 
                Daniel Vandersluis
            
        on Server Fault
        
        See other posts from Server Fault
        
            or by Daniel Vandersluis
        
        
        
        Published on 2012-02-07T18:55:29Z
        Indexed on 
            2012/11/18
            5:02 UTC
        
        
        Read the original article
        Hit count: 590
        
I have a ruby on rails application which is running on passenger and nginx, with one main webserver and multiple application servers. I am trying to update my deployment process in order to minimize (or ideally, remove) any downtime caused by the deployment. The main roadblock right now is that passenger takes some time to restart (ie. reload the application), so in order to get around this, I want to stagger my restarts so that only one app server gets restart at a time.
In order to do this without losing any long running passenger processes, I am thinking I need to gracefully shutdown the app server's nginx instance, which will cause it to no longer accept new connections but continue to process the existing ones; as well, HAProxy will detect that the app server is down and route new requests to the other server.
However, assuming that there is a long-running process, I am not sure how to detect when the graceful shutdown has completed so that I can start it back up. Since the shutdown is caused by sending a signal (ie. kill -QUIT $( cat /var/run/nginx.pid )), and the kill command will return immediately, I cannot combine commands (ie. kill ... && touch restarted), as the touch command will execute immediately, even if nginx hasn't completed its shutdown.
Is there any good way to do this?
© Server Fault or respective owner