#!/usr/bin/env jruby begin eval "Proc.new { |a,&b| }" rescue SyntaxError => no_blocks_with_procs STDERR.print "mauveserver must have Ruby 1.8.7 or later, sorry (if you "+ "try, you'll get a SyntaxError trying to load one of its libraries)\n" exit 1 end require 'mauve/configuration' include Mauve configuration_file = ARGV[0] if !configuration_file if File.exists?("/etc/mauvealert/mauveserver.conf") configuration_file = "/etc/mauvealert/mauveserver.conf" else STDERR.print "Syntax: #{$0} \n" exit 1 end end Configuration.current = ConfigurationBuilder.load(configuration_file) class RestartSignalReceived < Exception; end trap("HUP") do # this blows up if you do it twice in quick succession, but don't really # care about that case as it's only for log rotation. Thread.main.raise(RestartSignalReceived.new) end # Start canary thread. #require 'canary' #Canary.start(1, Log) # Main loop @logger = Log4r::Logger.new "mauve::server<#{Process.pid}>" loop do begin Configuration.current.server.run rescue Interrupt @logger.info "Interrupted by user, exiting" Configuration.current.close exit 0 rescue RestartSignalReceived => ex @logger.info "Restart signal received, reloading the configuration" begin new_configuration = ConfigurationBuilder.load(configuration_file) rescue Exception => ex @logger.error "Error reloading configuration, reusing old one: #{ex}" @logger.debug ex.backtrace.join("\n") end Configuration.current.close Configuration.current = new_configuration rescue Exception => ex @logger.fatal("Uncaught #{ex.class} exception, will try to log") @logger.fatal("Class: #{ex.class} "+ "Message: #{ex.message} "+ "Backtrace: #{ex.backtrace.join("\n")}") exit 9 end end