In the deployment I did kill -s USR2 `cat unicorn_pid` to gracefully restart unicorn. But I noticed that unicorn workers were partially restarted when using USR2. The following is how I did test: start unicorn in production environment: the action has the following code: def index logger.info "-----------------------------------------fooo bar ---------" logger.info "-----------------------------------fooo bar ---------" end then changed the code to: def index logger.info "--####---------------------------------fooo bar ---------" logger.info "-----------------------------------fooo bar ---------" end and run kill -s USR2 `cat unicorn_pid` and then tail the production.log (after several minutes) Started GET "/" for 192.168.21.1 at Sat May 07 04:13:31 -0700 2011 Processing by NewHomeController#index as HTML -----------------------------------fooo bar --------- -----------------------------------fooo bar --------- Rendered new_home/index.html.erb within layouts/new_home (15.5ms) Completed 200 OK in 16ms (Views: 16.2ms) Started GET "/" for 192.168.21.1 at Sat May 07 04:13:31 -0700 2011 Processing by NewHomeController#index as HTML --####---------------------------------fooo bar --------- -----------------------------------fooo bar --------- Rendered new_home/index.html.erb within layouts/new_home (28.1ms) Completed 200 OK in 29ms (Views: 28.9ms) Started GET "/" for 192.168.21.1 at Sat May 07 04:13:31 -0700 2011 Processing by NewHomeController#index as HTML -----------------------------------fooo bar --------- -----------------------------------fooo bar --------- Rendered new_home/index.html.erb within layouts/new_home (17.5ms) Completed 200 OK in 20ms (Views: 18.4ms) Started GET "/" for 192.168.21.1 at Sat May 07 04:13:37 -0700 2011 Processing by NewHomeController#index as HTML --####---------------------------------fooo bar --------- -----------------------------------fooo bar --------- Rendered new_home/index.html.erb within layouts/new_home (13.5ms) So it seems that unicorn was just partially restarted. Best Regards, Stone
Stone <stones.gao at gmail.com> wrote:> In the deployment I did kill -s USR2 `cat unicorn_pid` to gracefully > restart unicorn. But I noticed that unicorn workers were partially > restarted when using USR2.You need to send a SIGQUIT to the original master process, otherwise both masters and all workers continue running. This allows you to test the new deploy (combined with SIGWINCH). The last section of http://unicorn.bogomips.org/SIGNALS.html describes this process in detail.> The following is how I did test: > > start unicorn in production environment: > > the action has the following code:Ugh, don''t you have something like "ps axf" that shows you a process tree? It''s much easier just to *see* the process tree. -- Eric Wong