lib/rexec/daemon/controller.rb in rexec-1.4.1 vs lib/rexec/daemon/controller.rb in rexec-1.5.0
- old
+ new
@@ -16,35 +16,33 @@
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-require 'rexec/daemon/pidfile'
+require 'rexec/daemon/process_file'
require 'rexec/task'
module RExec
module Daemon
# Daemon startup timeout
TIMEOUT = 5
# This module contains functionality related to starting and stopping the daemon, and code for processing command line input.
module Controller
- # This function is called from the daemon executable. It processes ARGV and checks whether the user is asking for
- # +start+, +stop+, +restart+ or +status+.
+ # This function is called from the daemon executable. It processes ARGV and checks whether the user is asking for `start`, `stop`, `restart`, `status`.
def self.daemonize(daemon)
- #puts "Running in #{WorkingDirectory}, logs in #{LogDirectory}"
- case !ARGV.empty? && ARGV[0]
+ case ARGV.shift
when 'start'
start(daemon)
status(daemon)
when 'stop'
stop(daemon)
status(daemon)
- PidFile.cleanup(daemon)
+ ProcessFile.cleanup(daemon)
when 'restart'
stop(daemon)
- PidFile.cleanup(daemon)
+ ProcessFile.cleanup(daemon)
start(daemon)
status(daemon)
when 'status'
status(daemon)
else
@@ -55,39 +53,39 @@
# This function starts the supplied daemon
def self.start(daemon)
puts "Starting daemon..."
- case PidFile.status(daemon)
+ case ProcessFile.status(daemon)
when :running
$stderr.puts "Daemon already running!"
return
when :stopped
# We are good to go...
else
$stderr.puts "Daemon in unknown state! Will clear previous state and continue."
status(daemon)
- PidFile.clear(daemon)
+ ProcessFile.clear(daemon)
end
daemon.prefork
- daemon.mark_err_log
+ daemon.mark_log
fork do
Process.setsid
exit if fork
- PidFile.store(daemon, Process.pid)
+ ProcessFile.store(daemon, Process.pid)
File.umask 0000
Dir.chdir daemon.working_directory
$stdin.reopen "/dev/null"
- $stdout.reopen daemon.log_fn, "a"
+ $stdout.reopen daemon.log_file_path, "a"
$stdout.sync = true
- $stderr.reopen daemon.err_fn, "a"
+ $stderr.reopen $stdout
$stderr.sync = true
begin
error = nil
@@ -128,37 +126,37 @@
end
puts "Waiting for daemon to start..."
sleep 0.1
timer = TIMEOUT
- pid = PidFile.recall(daemon)
+ pid = ProcessFile.recall(daemon)
while pid == nil and timer > 0
# Wait a moment for the forking to finish...
puts "Waiting for daemon to start (#{timer}/#{TIMEOUT})"
sleep 1
# If the daemon has crashed, it is never going to start...
break if daemon.crashed?
- pid = PidFile.recall(daemon)
+ pid = ProcessFile.recall(daemon)
timer -= 1
end
end
# Prints out the status of the daemon
def self.status(daemon)
- case PidFile.status(daemon)
+ case ProcessFile.status(daemon)
when :running
- puts "Daemon status: running pid=#{PidFile.recall(daemon)}"
+ puts "Daemon status: running pid=#{ProcessFile.recall(daemon)}"
when :unknown
if daemon.crashed?
puts "Daemon status: crashed"
$stdout.flush
- daemon.tail_err_log($stderr)
+ daemon.tail_error_log($stderr)
else
puts "Daemon status: unknown"
end
when :stopped
puts "Daemon status: stopped"
@@ -168,47 +166,47 @@
# Stops the daemon process.
def self.stop(daemon)
puts "Stopping daemon..."
# Check if the pid file exists...
- if !File.file?(daemon.pid_fn)
+ unless File.file?(daemon.process_file_path)
puts "Pid file not found. Is the daemon running?"
return
end
- pid = PidFile.recall(daemon)
+ pid = ProcessFile.recall(daemon)
# Check if the daemon is already stopped...
- unless PidFile.running(daemon)
+ unless ProcessFile.running(daemon)
puts "Pid #{pid} is not running. Has daemon crashed?"
return
end
- pid = PidFile.recall(daemon)
+ pid = ProcessFile.recall(daemon)
Process.kill("INT", pid)
sleep 0.1
# Kill/Term loop - if the daemon didn't die easily, shoot
# it a few more times.
attempts = 5
- while PidFile.running(daemon) and attempts > 0
+ while ProcessFile.running(daemon) and attempts > 0
sig = (attempts < 2) ? "KILL" : "TERM"
puts "Sending #{sig} to pid #{pid}..."
Process.kill(sig, pid)
sleep 1
attempts -= 1
end
# If after doing our best the daemon is still running (pretty odd)...
- if PidFile.running(daemon)
+ if ProcessFile.running(daemon)
puts "Daemon appears to be still running!"
return
end
# Otherwise the daemon has been stopped.
- PidFile.clear(daemon)
+ ProcessFile.clear(daemon)
end
end
end
end