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