/
zombie_passenger_killer
executable file
·40 lines (32 loc) · 1.49 KB
/
zombie_passenger_killer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/env ruby
require 'rubygems'
require 'optparse'
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
require 'zombie_passenger_killer'
unless system("which timeout > /dev/null")
warn "Please install timeout commandline tool e.g. via apt-get install timeout / apt-get install coreutils"
end
options = {}
OptionParser.new do |opts|
opts.banner = <<BANNER
Guaranteed zombie passengers death
Usage:
zombie_passenger_killer [options]
Options:
BANNER
opts.on("-m", "--max [SIZE]", Integer, "Max high CPU entries in history before killing (default: off)") {|i| options[:max]=i }
opts.on("--history [SIZE]", Integer, "History size (default: 5)") {|i| options[:history]=i }
opts.on("-c", "--cpu [PERCENT]", Integer, "Mark as high CPU when above PERCENT (default: 70)") {|i| options[:cpu]=i }
opts.on("-g", "--grace [SECONDS]", Integer, "Wait SECONDS before hard-killing (-9) a process (default: 5)") {|i| options[:grace]=i }
opts.on("-i", "--interval [SECONDS]", Integer, "Check every SECONDS (default: 10)") {|i| options[:interval]=i }
opts.on("-p", "--pattern [PATTERN]", String, "Find processes with this pattern (default: ' Rack: ')") {|i| options[:pattern]=i }
opts.on("-h", "--help","Show this.") { puts opts; exit }
opts.on('-v', '--version','Show Version'){ puts ZombiePassengerKiller::VERSION; exit}
end.parse!
$stdout.sync = true
puts "Started at #{Time.now}"
killer = ZombiePassengerKiller.new(options)
loop do
killer.hunt_zombies
sleep options[:interval] || 10
end