From 46681f6ffd71b0902801f728f8911b02f3f09e1e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 21 Mar 2009 13:14:33 -0700 Subject: Rotate master logs before workers. The master _may_ run with different user/group/umask than the workers. Since the logs were always created by the master process, the master should rotate them first to ensure correct ownership and permissions. This way if the workers fail log rotation and die, they'll be automatically respawned with the new logs in place. --- lib/unicorn.rb | 4 +++- test/exec/test_exec.rb | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/unicorn.rb b/lib/unicorn.rb index 9d40287..44d1b6d 100644 --- a/lib/unicorn.rb +++ b/lib/unicorn.rb @@ -179,8 +179,10 @@ module Unicorn stop(false) break when 'USR1' # rotate logs - kill_each_worker('USR1') + logger.info "master rotating logs..." Unicorn::Util.reopen_logs + logger.info "master done rotating logs" + kill_each_worker('USR1') when 'USR2' # exec binary, stay alive in case something went wrong reexec when 'WINCH' diff --git a/test/exec/test_exec.rb b/test/exec/test_exec.rb index fc8ac26..ea9fc7c 100644 --- a/test/exec/test_exec.rb +++ b/test/exec/test_exec.rb @@ -300,7 +300,7 @@ end sleep DEFAULT_RES log = File.readlines(rotate.path) end - assert_equal 4, log.grep(/rotating logs\.\.\./).size + assert_equal 4, log.grep(/worker=\d+ rotating logs\.\.\./).size assert_equal 0, log.grep(/done rotating logs/).size tries = DEFAULT_TRIES @@ -309,7 +309,7 @@ end sleep DEFAULT_RES log = File.readlines(COMMON_TMP.path) end - assert_equal 4, log.grep(/done rotating logs/).size + assert_equal 4, log.grep(/worker=\d+ done rotating logs/).size assert_equal 0, log.grep(/rotating logs\.\.\./).size assert_nothing_raised { Process.kill('QUIT', pid) } status = nil -- cgit v1.2.3-24-ge0c7