def self.daemonize_runner(pid=nil)
raise "The Unix Daemonizer can not be used on the Windows Platform" if Util.windows?
UnixDaemon.daemonize do
if pid
if File.exist?(pid)
lock_pid = File.read(pid)
begin
lock_pid = Integer(lock_pid)
rescue ArgumentError, TypeError
lock_pid = nil
end
if lock_pid.nil?
File.unlink(pid)
else
begin
Process.kill(0, lock_pid)
raise "Process is already running with PID #{lock_pid}"
rescue Errno::ESRCH
File.unlink(pid)
end
end
end
opt = File::CREAT | File::EXCL | File::WRONLY
File.open(pid, opt) {|f| f.print(Process.pid) }
end
begin
runner = Runner.new(nil)
runner.main_loop
rescue => e
Log.warn(e.backtrace)
Log.warn(e)
ensure
File.unlink(pid) if pid && File.exist?(pid)
end
end
end