Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
#!/custom/ree/bin/ruby
require 'etc'
require 'net/smtp'
CORE_DIR = "/cores"
TO_EMAIL = "dev@blah.com"
FROM_EMAIL = "core_watcher@blah.com"
MAIL_SERVER = "blah"
class CoreHelper
def self.start!
time = Time.now.strftime("%Y-%m-%d-%H:%M")
corefile = "#{CORE_DIR}/core-#{time}.core"
cmdline = File.read("/proc/#{ARGV[0]}/cmdline")
f = File.new("#{CORE_DIR}/core-#{time}-metadata", "w")
f.puts "PID: #{ARGV[0]}"
f.puts "Signal: #{ARGV[1]}"
f.puts "UID: #{Etc.getpwuid(ARGV[2].to_i)[:name]}/#{ARGV[2]}, GID: #{Etc.getgrgid(ARGV[3].to_i)[:name]}/#{ARGV[3]}"
f.puts "Command line: #{cmdline}"
f.puts
f.puts
f.flush
core = File.new(corefile, "w")
begin
while (chunk = STDIN.read)
core.write chunk
break if chunk == nil || chunk.length == 0
end
rescue EOFError
core.close
end
core.close
r,w = IO.pipe
child = fork{ $stdin.reopen(r); $stdout.reopen(f); $stderr.reopen(f); exec "/usr/bin/gdb -q -c #{corefile}" }
w.puts "set height 0"
w.puts "backtrace"
w.puts "info registers"
w.puts "x/5i $rip"
w.puts "quit"
Process.wait
msg = <<MESSAGE
From: #{FROM_EMAIL}
To: #{TO_EMAIL}
Subject: Core dump on #{`hostname`}
#{File.read("#{CORE_DIR}/core-#{time}-metadata")}
MESSAGE
Net::SMTP.start(MAIL_SERVER) do |smtp|
smtp.send_message msg, FROM_EMAIL, TO_EMAIL
end
f.close
exit 0
end
end
CoreHelper.start!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.