Sha256: 9ce1498377e3a4a9043b43b749316844b709d3519c83ae226f8da69579690611

Contents?: true

Size: 1.85 KB

Versions: 29

Compression:

Stored size: 1.85 KB

Contents

module Capricorn
  module Daemon
    class Base
      
      def self.daemonize(&block)
        Capricorn::Daemon::Controller.start(self,&block)
      end
      
    end
  
    module PidFile
      def self.store(pid)
        File.open(self.pid_file, 'w') {|f| f << pid}
      end
  
      def self.recall
        IO.read(self.pid_file).to_i rescue nil
      end
      
      def self.destroy
        FileUtils.rm(self.pid_file) if self.exist?
      end
      
      def self.pid_file
        Capricorn.system.path("Server.pid")
      end
      
      def self.exist?
        File.file?(self.pid_file)
      end
    end
  
    module Controller
      
      def self.start(daemon, &block)
        fork do
          Process.setsid
          exit if fork
          if PidFile.exist?
            puts "Pid file #{PidFile.pid_file} already exists. Not starting."
            exit 1
          end
          
          setup_child
          regitser_handlers(daemon, &block)
          
          daemon.start
        end
        puts "Daemon started."
      end
      
      def self.stop
        if !Capricorn::Daemon::PidFile.exist?
          puts "Pid file not found. Is the daemon started?"
          exit
        end
        pid = Capricorn::Daemon::PidFile.recall
        pid && Process.kill("TERM", pid)
      rescue Errno::ESRCH
        puts "Pid file found, but process was not running. The daemon may have died."
      end
      
    private
      
      def self.setup_child
        Capricorn::Daemon::PidFile.store(Process.pid)
        Dir.chdir Capricorn.system.root
        File.umask 0000
        Capricorn::ExceptionHandler.redirect_std
      end
      
      def self.regitser_handlers(daemon, &block)
        trap("TERM") { daemon.stop; exit }
        at_exit { Capricorn::Daemon::PidFile.destroy if $master }
        at_exit(&block) if block
      end
      
    end
  end
end

Version data entries

29 entries across 29 versions & 2 rubygems

Version Path
simonmenke-capricorn-0.2.03 lib/capricorn/daemon.rb
simonmenke-capricorn-0.2.07 lib/capricorn/daemon.rb
simonmenke-capricorn-0.2.25 lib/capricorn/daemon.rb
simonmenke-capricorn-0.2.26 lib/capricorn/daemon.rb
capricorn-0.2.25 lib/capricorn/daemon.rb
capricorn-0.2.24 lib/capricorn/daemon.rb
capricorn-0.2.23 lib/capricorn/daemon.rb
capricorn-0.2.22 lib/capricorn/daemon.rb
capricorn-0.2.21 lib/capricorn/daemon.rb
capricorn-0.2.20 lib/capricorn/daemon.rb
capricorn-0.2.19 lib/capricorn/daemon.rb
capricorn-0.2.18 lib/capricorn/daemon.rb
capricorn-0.2.17 lib/capricorn/daemon.rb
capricorn-0.2.16 lib/capricorn/daemon.rb
capricorn-0.2.15 lib/capricorn/daemon.rb
capricorn-0.2.14 lib/capricorn/daemon.rb
capricorn-0.2.13 lib/capricorn/daemon.rb
capricorn-0.2.12 lib/capricorn/daemon.rb
capricorn-0.2.11 lib/capricorn/daemon.rb
capricorn-0.2.10 lib/capricorn/daemon.rb