class Process::Daemon::Controller
def spawn
def spawn @daemon.prefork @daemon.mark_log fork do Process.setsid exit if fork ProcessFile.store(@daemon, Process.pid) File.umask 0000 Dir.chdir @daemon.working_directory $stdin.reopen '/dev/null' $stdout.reopen @daemon.log_file_path, 'a' $stdout.sync = true $stderr.reopen $stdout $stderr.sync = true begin @daemon.spawn rescue Exception => error $stderr.puts "=== Daemon Exception Backtrace @ #{Time.now.to_s} ===" $stderr.puts "#{error.class}: #{error.message}" $!.backtrace.each { |at| $stderr.puts at } $stderr.puts "=== Daemon Crashed ===" $stderr.flush ensure $stderr.puts "=== Daemon Stopping @ #{Time.now.to_s} ===" $stderr.flush end end end