threaded.rb 951 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. require 'thread'
  2. require 'huginn_scheduler'
  3. def stop
  4. puts 'Exiting...'
  5. @scheduler.stop
  6. @dj.stop
  7. @stream.stop
  8. end
  9. def safely(&block)
  10. begin
  11. yield block
  12. rescue StandardError => e
  13. STDERR.puts "\nException #{e.message}:\n#{e.backtrace.join("\n")}\n\n"
  14. STDERR.puts "Terminating myself ..."
  15. stop
  16. end
  17. end
  18. threads = []
  19. threads << Thread.new do
  20. safely do
  21. @stream = TwitterStream.new
  22. @stream.run
  23. puts "Twitter stream stopped ..."
  24. end
  25. end
  26. threads << Thread.new do
  27. safely do
  28. @scheduler = HuginnScheduler.new
  29. @scheduler.run!
  30. puts "Scheduler stopped ..."
  31. end
  32. end
  33. threads << Thread.new do
  34. safely do
  35. require 'delayed/command'
  36. @dj = Delayed::Worker.new
  37. @dj.start
  38. puts "Delayed job stopped ..."
  39. end
  40. end
  41. # We need to wait a bit to let delayed_job set it's traps so we can override them
  42. sleep 0.5
  43. trap('TERM') do
  44. stop
  45. end
  46. trap('INT') do
  47. stop
  48. end
  49. threads.collect { |t| t.join }