Object
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
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
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
Corresponds to controller method of the same name
# File lib/rexec/daemon/base.rb, line 123 def self.daemonize Controller.daemonize(self) end
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
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 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
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
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
The main function to start the daemon
# File lib/rexec/daemon/base.rb, line 151 def self.run end
Runtime data directory for the daemon.
# File lib/rexec/daemon/base.rb, line 70 def self.runtime_directory File.join(working_directory, "run") end
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
Corresponds to controller method of the same name
# File lib/rexec/daemon/base.rb, line 128 def self.start Controller.start(self) end
Corresponds to controller method of the same name
# File lib/rexec/daemon/base.rb, line 138 def self.status Controller.status(self) end
Corresponds to controller method of the same name
# File lib/rexec/daemon/base.rb, line 133 def self.stop Controller.stop(self) end
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
Generated with the Darkfish Rdoc Generator 2.