diff --git a/lib/sidekiq/cli.rb b/lib/sidekiq/cli.rb
index 04e0c074..e311d6b3 100644
--- a/lib/sidekiq/cli.rb
+++ b/lib/sidekiq/cli.rb
@@ -90,7 +90,7 @@ module Sidekiq
       rescue Interrupt
         logger.info 'Shutting down'
         launcher.stop
-        fire_event(:shutdown)
+        fire_event(:shutdown, true)
         # Explicitly exit so busy Processor threads can't block
         # process shutdown.
         exit(0)
@@ -125,7 +125,7 @@ module Sidekiq
       when 'USR1'
         Sidekiq.logger.info "Received USR1, no longer accepting new work"
         launcher.manager.async.stop
-        fire_event(:quiet)
+        fire_event(:quiet, true)
       when 'USR2'
         if Sidekiq.options[:logfile]
           Sidekiq.logger.info "Received USR2, reopening log file"
diff --git a/lib/sidekiq/util.rb b/lib/sidekiq/util.rb
index 3f38976d..ae867ab0 100644
--- a/lib/sidekiq/util.rb
+++ b/lib/sidekiq/util.rb
@@ -39,8 +39,10 @@ module Sidekiq
       @@identity ||= "#{hostname}:#{$$}:#{process_nonce}"
     end
 
-    def fire_event(event)
-      Sidekiq.options[:lifecycle_events][event].each do |block|
+    def fire_event(event, reverse=false)
+      arr = Sidekiq.options[:lifecycle_events][event]
+      arr.reverse! if reverse
+      arr.each do |block|
         begin
           block.call
         rescue => ex