class PhusionPassenger::Config::DetachProcessCommand
def self.create_option_parser(options)
def self.create_option_parser(options) OptionParser.new do |opts| nl = "\n" + ' ' * 37 opts.banner = "Usage: passenger-config detach-process [OPTIONS] <PID>\n" opts.separator "" opts.separator " Remove an application process from the #{PROGRAM_NAME} process pool, and" opts.separator " shut it down. Has a similar effect to killing the application process" opts.separator " directly with `kill <PID>`. But `kill` aborts any active requests, while" opts.separator " this command shuts down the process after active requests are finished." opts.separator "" opts.separator " If you want to force abort a process and its active requests, just use `kill`." opts.separator "" opts.separator "Options:" opts.on("--instance NAME", String, "The #{PROGRAM_NAME} instance to select") do |value| options[:instance] = value end opts.on("--ignore-nonexistant-pid", "Exit successfully even if the specified#{nl}" + "PID is not in the process pool.") do options[:ignore_nonexistant_pid] = true end opts.on("-h", "--help", "Show this help") do options[:help] = true end end end
def help
def help puts @parser end
def parse_options
def parse_options super if @argv.empty? abort "Please pass a PID. " + "See --help for more information." elsif @argv.size == 1 @pid = @argv[0].to_i elsif @argv.size > 1 help abort end end
def perform_detach
def perform_detach request = Net::HTTP::Post.new("/pool/detach_process.json") request.basic_auth("admin", obtain_full_admin_password(@instance)) request.content_type = "application/json" request.body = PhusionPassenger::Utils::JSON.generate(:pid => @pid) response = @instance.http_request("agents.s/server_admin", request) if response.code.to_i / 100 == 2 body = PhusionPassenger::Utils::JSON.parse(response.body) if body['detached'] puts "Process #{@pid} detached." elsif @options[:ignore_nonexistant_pid] puts "Could not detach process #{@pid}." else abort "Could not detach process #{@pid}." end else STDERR.puts "*** An error occured while communicating with the #{PROGRAM_NAME} server:" STDERR.puts response.body abort end end
def run
def run parse_options select_passenger_instance perform_detach end