lib/sidejobs/daemon.rb in sidejobs-4.0.0.2 vs lib/sidejobs/daemon.rb in sidejobs-5.1.0

- old
+ new

@@ -1,12 +1,9 @@ module Sidejobs class Daemon + include Loggable - def initialize - @stopping = false - end - def running? if pid begin Process.kill 0, pid true @@ -18,87 +15,92 @@ end end def start unless running? - daemonize - write_pid - trap_signals - process + spawn end end def stop if running? Process.kill :TERM, pid - delete_pid end end def restart if running? - stop - start + Process.kill :HUP, pid else start end end def pid File.read(pid_path).to_i rescue nil end - def stopping? - @stopping == true - end - private + def spawn + daemonize + write_pid + trap_signals + process + end + def daemonize - exit if fork - Process.setsid - exit if fork - Dir.chdir '/' - File.umask 0000 - $stdout.reopen log_path, 'a' - $stderr.reopen $stdout - $stdout.sync = true + Process.daemon end def trap_signals trap :TERM do - @stopping = true + @signal = :stop end + trap :HUP do + @signal = :restart + end end def delete_pid - File.unlink pid_path + FileUtils.rm_rf pid_path end def write_pid FileUtils.mkdir_p pid_path.dirname File.write pid_path, Process.pid end - def log_path - Rails.root.join 'log/sidejobs.log' - end - def pid_path - Rails.root.join 'tmp/pids/sidejobs.pid' + Rails.root.join 'tmp/sidejobs.pid' end def processor @processor ||= Processor.new end + def handle_signal + case @signal + when :stop + delete_pid + when :restart + @signal = nil + spawn + end + end + + def signal_received? + @signal.present? + end + def process - Sidejobs.logger.info 'Starting' - until stopping? do + logger.info "Started #{pid} at #{Time.zone.now}" + until signal_received? do processor.process sleep Sidejobs.configuration.sleep_delay end - Sidejobs.logger.info 'Stopping' + logger.info "Stopped #{pid} at #{Time.zone.now}" + handle_signal end end end