lib/asir/main.rb in asir-1.2.2 vs lib/asir/main.rb in asir-1.2.3

- old
+ new

@@ -117,25 +117,28 @@ when /^log_([^_]+)_([^_]+)!$/ puts log_file when /^taillog_([^_]+)_([^_]+)!$/ exec "tail -f #{log_file.inspect}" when /^pid_([^_]+)_([^_]+)!$/ - pid = server_pid rescue nil - alive = process_running? pid + pid = _alive? puts "#{pid_file} #{pid || :NA} #{alive}" when /^alive_([^_]+)_([^_]+)!$/ - pid = server_pid rescue nil - alive = process_running? pid + pid = _alive? puts "#{pid_file} #{pid || :NA} #{alive}" if @verbose self.exit_code += 1 unless alive when /^stop_([^_]+)_([^_]+)!$/ kill_server! else super end end + def _alive? + pid = server_pid rescue nil + process_running? pid + end + def usage! $stderr.puts <<"END" SYNOPSIS: asir [ <<options>> ... ] <<verb>> <<adjective>> <<object>> [ <<identifier>> ] @@ -187,19 +190,28 @@ def start_resque_conduit! _start_conduit! end - def _start_conduit! + def _start_conduit! type = adjective + if (pid = _alive?) && ! force + log "already-running pid #{pid}", :stderr + return + end + log "start_conduit! #{type}" config!(:environment) self.transport = config!(:transport) fork_server! do transport.start_conduit! :fork => false end end def _start_worker! type = adjective + if (pid = _alive?) && ! force + log "already-running pid #{pid}", :stderr + return + end log "start_worker! #{type}" type = type.to_s config!(:environment) self.transport = config!(:transport) @@ -233,17 +245,22 @@ self end def run_server! cmd = nil lf = File.open(log_file, "a+") + lf.sync = true File.chmod(0666, log_file) rescue nil $stdin.close rescue nil STDIN.close rescue nil STDOUT.reopen(lf) + STDOUT.sync = true $stdout.reopen(lf) if $stdout.object_id != STDOUT.object_id + $stdout.sync = true STDERR.reopen(lf) + STDERR.sync = true $stderr.reopen(lf) if $stderr.object_id != STDERR.object_id + $stderr.sync = true # Process.daemon rescue nil # Ruby 1.9.x only. lf.puts "#{log_str} starting pid #{$$}" begin if cmd exec(cmd) @@ -324,12 +341,13 @@ def _run_transport_server! wid = 0 log "running transport worker #{transport.class} #{wid}" config!(:start) $0 += " #{wid} #{transport.uri rescue nil}" old_arg0 = $0.dup - after_receive_message = transport.after_receive_message || lambda { | transport, message | nil } - transport.after_receive_message = lambda do | transport, message | + after_receive_message = transport.after_receive_message || lambda { | transport, state | nil } + transport.after_receive_message = lambda do | transport, state | + message = state.message $0 = "#{old_arg0} #{transport.message_count} #{message.identifier}" after_receive_message.call(transport, message) end transport.run_server! self @@ -369,16 +387,15 @@ end def process_running? pid case pid when false, nil - pid when Integer Process.kill(0, pid) else raise TypeError, "expected false, nil, Integer; given #{pid.inspect}" end - true + pid rescue ::Errno::ESRCH false rescue ::Exception => exc $stderr.puts " DEBUG: process_running? #{pid} => #{exc.inspect}" false