FIX: Reopen sidekiq log files after rotation (#9429)

Unicorn uses the USR1 to indicate that log files should be reopened. This commit implements the same functionality for our forked sidekiq workers:

- USR1 is intercepted in the unicorn master, and re-issued to all child processes
- USR1 is trapped in the sidekiq processes, and `Unicorn::Util.reopen_logs` is used to re-open log files
This commit is contained in:
David Taylor 2020-04-16 12:13:13 +01:00 committed by GitHub
parent 5e24436454
commit ed6b3b82bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 0 deletions

View File

@ -95,6 +95,13 @@ before_fork do |server, worker|
Demon::Sidekiq.stop
end
# Trap USR1, so we can re-issue to sidekiq workers
# but chain the default unicorn implementation as well
old_handler = Signal.trap("USR1") do
Demon::Sidekiq.kill("USR1")
old_handler.call
end
class ::Unicorn::HttpServer
alias :master_sleep_orig :master_sleep

View File

@ -37,6 +37,13 @@ class Demon::Base
end
end
def self.kill(signal)
return unless @demons
@demons.values.each do |demon|
demon.kill(signal)
end
end
attr_reader :pid, :parent_pid, :started, :index
attr_accessor :stop_timeout
@ -63,6 +70,10 @@ class Demon::Base
end
end
def kill(signal)
Process.kill(signal, @pid)
end
def stop_signal
"HUP"
end

View File

@ -34,6 +34,13 @@ class Demon::Sidekiq < ::Demon::Base
Sidekiq.logger = nil
cli = Sidekiq::CLI.instance
# Unicorn uses USR1 to indicate that log files have been rotated
Signal.trap("USR1") do
puts "Sidekiq PID #{Process.pid} reopening logs..."
Unicorn::Util.reopen_logs
puts "Sidekiq PID #{Process.pid} done reopening logs..."
end
options = ["-c", GlobalSetting.sidekiq_workers.to_s]
[['critical', 8], ['default', 4], ['low', 2], ['ultra_low', 1]].each do |queue_name, weight|