namespace :server do
def execute(command) puts "Executing: #{command}" `#{command}` end Inf.server.servers.each do |server| namespace server do desc "Start #{server} server" task :start do puts "Starting: #{server.to_s.green}" start_command = Inf.server.fetch(server).fetch :start if start_command.nil? raise "no start command configured for #{server}" else execute start_command end end desc "Stop #{server} server" task :stop do puts "Stopping: #{server.to_s.green}" stop_command = Inf.server.fetch(server).fetch :stop if stop_command.nil? raise "no stop command configured for #{server}" elsif stop_command == 'kill' Rake::Task["server:#{server}:kill"].reinvoke else execute stop_command end end desc "Restart #{server} server" task :restart do Rake::Task["server:#{server}:stop"].reinvoke Rake::Task["server:#{server}:start"].reinvoke end desc "Kill #{server} server" task :kill do pid_file = Inf.server.fetch(server).pid_file if File.exists? pid_file pid = File.read(pid_file).strip.to_i raise "could not parse #{server} pid from #{pid_file}" if pid == 0 signal = Inf.server.fetch(server).fetch(:kill_signal) || 'QUIT' begin puts "Signal: #{signal}, PID: #{pid}" Process.kill signal, pid rescue Errno::ENOENT, Errno::ESRCH end end end desc "Tail #{server} server log file" task :tail do log_file = Inf.server.fetch(server).log_file puts "Watching: #{log_file.green}" begin IO.popen "tail -n 0 -f #{log_file}" do |file| while line = file.gets.to_s.strip do puts line unless line.empty? end end rescue Interrupt end end end end
end