Sha256: 9d80b6463f6db98d5f66ae4f934a6274144ae24e59d3b27aceaba7c7507930d0

Contents?: true

Size: 1015 Bytes

Versions: 4

Compression:

Stored size: 1015 Bytes

Contents

module Delayed
  class Master
    class Signaler
      def initialize(master)
        @master = master
      end

      def register
        signals = [[:TERM, :stop], [:INT, :stop], [:QUIT, :quit], [:USR1, :reopen_files], [:USR2, :restart]]
        signals.each do |signal, method|
          register_signal(signal, method)
        end
      end

      def dispatch(signal)
        @master.workers.each do |worker|
          next unless worker.pid
          dispatch_to(signal, worker.pid)
        end
      end

      private

      def register_signal(signal, method)
        trap(signal) do
          Thread.new do
            @master.logger.info "received #{signal} signal"
            @master.public_send(method)
          end
        end
      end

      def dispatch_to(signal, pid)
        Process.kill(signal, pid)
        @master.logger.info "sent #{signal} signal to worker #{pid}"
      rescue
        @master.logger.error "failed to send #{signal} signal to worker #{pid}"
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
delayed_job_master-2.0.3 lib/delayed/master/signaler.rb
delayed_job_master-2.0.2 lib/delayed/master/signaler.rb
delayed_job_master-2.0.1 lib/delayed/master/signaler.rb
delayed_job_master-2.0.0 lib/delayed/master/signaler.rb