18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/executer.rb', line 18
def initialize(yaml)
options = YAML.load(File.read(yaml))
@logger = Logger.new(options['log'] || '/var/log/executer.log')
log "Starting executer server (redis @ #{options['redis']})."
log "Logging to stdout and #{options['log']}..."
redis = Redis.connect(:url => "redis://#{options['redis']}")
retries = 0
begin
while true
if request = redis.lpop('executer:request')
Thread.new do
Timeout.timeout(60*60) do
request = Yajl::Parser.parse(request)
log("Running #{request.inspect}")
id = request['id']
success = system(request['cmd'])
redis.publish(
"executer:response:#{id}",
success.to_s
)
end
end
end
sleep(1.0 / 1000.0)
end
rescue Interrupt
shut_down
rescue Exception => e
log "Error: #{e.message}"
log "\t#{e.backtrace.join("\n\t")}"
retries += 1
shut_down if retries >= 10
retry
end
end
|