mirror of https://github.com/agdsn/xerxes.git
runner added
This commit is contained in:
parent
1b5a27118a
commit
d71e558ba4
|
|
@ -0,0 +1,3 @@
|
|||
#tcp:127.0.0.1:13338 tcp:localhost:3306 quiet debug
|
||||
tcp:127.0.0.1:13338 tcp:localhost:3306 quiet
|
||||
unix:testfile tcp:localhost:3306 quiet
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
#!/usr/bin/ruby
|
||||
|
||||
require 'syslog'
|
||||
|
||||
@config_file="xerxes.conf"
|
||||
@bin_name="./xerxes"
|
||||
|
||||
@log = Syslog.open('xerxes')
|
||||
|
||||
@threads = Array.new ;
|
||||
|
||||
def run_process(cfg, num)
|
||||
m = Thread.current
|
||||
t = Thread.start{
|
||||
|
||||
pid = Process.fork{
|
||||
exec(@bin_name, "--src", cfg[:src], "--dst", cfg[:dst], (cfg[:debug] ? "--debug" : ""), (cfg[:quiet] ? "--quiet" : ""))
|
||||
}
|
||||
@threads[num][:pid] = pid
|
||||
@log.notice("Xerxes for #{cfg[:src]}<->#{cfg[:dst]} started")
|
||||
Process.wait(pid)
|
||||
@log.warning("Xerxes for #{cfg[:src]}<->#{cfg[:dst]} died")
|
||||
sleep 0.2
|
||||
m.wakeup
|
||||
}
|
||||
t
|
||||
end
|
||||
|
||||
def check_threads
|
||||
@threads.each_index{|idx|
|
||||
if (!@threads[idx][:thread].alive?)
|
||||
@log.notice("try to restart Xerxes for #{@threads[idx][:config][:src]}<->#{@threads[idx][:config][:dst]}")
|
||||
@threads[idx][:thread] = run_process(@threads[idx][:config], idx)
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
i = 0;
|
||||
File.foreach(@config_file){|line|
|
||||
if (line =~ /^((tcp|unix):([\d\w_.\/-]+)(:(\d+))?) ((tcp|unix):([\d\w_.\/-]+)(:(\d+))?)( quiet)?( debug)?$/)
|
||||
|
||||
match = Regexp.last_match[1..12]
|
||||
|
||||
@threads[i] = Hash.new
|
||||
@threads[i][:config] = Hash.new
|
||||
|
||||
@threads[i][:config][:src] = match[0]
|
||||
@threads[i][:config][:dst] = match[5]
|
||||
@threads[i][:config][:quiet] = ! match[10].nil?
|
||||
@threads[i][:config][:debug] = ! match[11].nil?
|
||||
|
||||
i = i +1
|
||||
end
|
||||
}
|
||||
|
||||
@threads.each_index{|idx|
|
||||
@log.notice("try to start Xerxes for #{@threads[idx][:config][:src]}<->#{@threads[idx][:config][:dst]}")
|
||||
@threads[idx][:thread] = run_process(@threads[idx][:config], idx)
|
||||
}
|
||||
|
||||
m = Thread.current
|
||||
Thread.start{
|
||||
Signal.trap("TERM"){
|
||||
@log.warning("SIGTERM recived, exiting")
|
||||
@threads.each{|thread|
|
||||
@log.info("quit Xerxes for #{thread[:config][:src]}<->#{thread[:config][:dst]}")
|
||||
thread[:thread].kill
|
||||
Process.kill("TERM", thread[:pid])
|
||||
}
|
||||
Process.exit!
|
||||
}
|
||||
}
|
||||
|
||||
while(true) do
|
||||
sleep
|
||||
sleep 0.5
|
||||
check_threads
|
||||
end
|
||||
Loading…
Reference in New Issue