Parent

RExec::Daemon::Base

This class is the base daemon class. If you are writing a daemon, you should inherit from this class.

The basic structure of a daemon is as follows:

class Server < RExec::Daemon::Base
        def self.run
                # Long running process, e.g. web server, game server, etc.
        end
end

Server.daemonize

The base directory specifies a path such that:

working_directory = #{@@base_directory}/#{daemon_name}
log_directory = #{working_directory}/log
log_file_path = #{log_directory}/daemon.log
runtime_directory = #{working_directory}/run
process_file_path = #{runtime_directory}/daemon.pid

Public Class Methods

crashed?() click to toggle source

Check the last few lines of the log file to find out if the daemon crashed.

# File lib/rexec/daemon/base.rb, line 105
def self.crashed?
        File.open(log_file_path, "r") do |log_file|
                log_file.seek_end

                count = 3
                log_file.reverse_each_line do |line|
                        return true if line.match("=== Daemon Crashed")

                        count -= 1

                        break if count == 0
                end
        end

        return false
end
daemon_name() click to toggle source

Return the name of the daemon

# File lib/rexec/daemon/base.rb, line 50
def self.daemon_name
        return name.gsub(/[^a-zA-Z0-9]+/, '-')
end
daemonize() click to toggle source

Corresponds to controller method of the same name

# File lib/rexec/daemon/base.rb, line 123
def self.daemonize
        Controller.daemonize(self)
end
log_directory() click to toggle source

Return the directory to store log files in.

# File lib/rexec/daemon/base.rb, line 60
def self.log_directory
        File.join(working_directory, "log")
end
log_file_path() click to toggle source

Standard log file for stdout and stderr.

# File lib/rexec/daemon/base.rb, line 65
def self.log_file_path
        File.join(log_directory, "#{daemon_name}.log")
end
mark_log() click to toggle source

Mark the output log.

# File lib/rexec/daemon/base.rb, line 80
def self.mark_log
        File.open(log_file_path, "a") do |log_file|
                log_file.puts "=== Log Marked @ #{Time.now.to_s} ==="
        end
end
prefork() click to toggle source

The main function to setup any environment required by the daemon

# File lib/rexec/daemon/base.rb, line 143
def self.prefork
        @@base_directory = File.expand_path(@@base_directory) if @@base_directory

        FileUtils.mkdir_p(log_directory)
        FileUtils.mkdir_p(runtime_directory)
end
process_file_path() click to toggle source

Standard location of process pid file.

# File lib/rexec/daemon/base.rb, line 75
def self.process_file_path
        File.join(runtime_directory, "#{daemon_name}.pid")
end
run() click to toggle source

The main function to start the daemon

# File lib/rexec/daemon/base.rb, line 151
def self.run
end
runtime_directory() click to toggle source

Runtime data directory for the daemon.

# File lib/rexec/daemon/base.rb, line 70
def self.runtime_directory
        File.join(working_directory, "run")
end
shutdown() click to toggle source

The main function to stop the daemon

# File lib/rexec/daemon/base.rb, line 155
def self.shutdown
        # Interrupt all children processes, preferably to stop them so that they are not left behind.
        Process.kill(0, :INT)
end
start() click to toggle source

Corresponds to controller method of the same name

# File lib/rexec/daemon/base.rb, line 128
def self.start
        Controller.start(self)
end
status() click to toggle source

Corresponds to controller method of the same name

# File lib/rexec/daemon/base.rb, line 138
def self.status
        Controller.status(self)
end
stop() click to toggle source

Corresponds to controller method of the same name

# File lib/rexec/daemon/base.rb, line 133
def self.stop
        Controller.stop(self)
end
tail_log(output) click to toggle source

Prints some information relating to daemon startup problems.

# File lib/rexec/daemon/base.rb, line 87
def self.tail_log(output)
        lines = []

        File.open(log_file_path, "r") do |log_file|
                log_file.seek_end

                log_file.reverse_each_line do |line|
                        lines << line
                        break if line.match("=== Log Marked") || line.match("=== Daemon Exception Backtrace")
                end
        end

        lines.reverse_each do |line|
                output.puts line
        end
end
working_directory() click to toggle source

The directory the daemon will run in.

# File lib/rexec/daemon/base.rb, line 55
def self.working_directory
        @@base_directory
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.