Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. require "English"
  2. require "logger"
  3. require "pathname"
  4.  
  5. # kill me with kill -INT PID
  6.  
  7. script_path = Pathname(__FILE__)
  8. pid_file = script_path.sub_ext(".pid")
  9. pid_file.write(String(Process.pid))
  10.  
  11. log_file = Pathname(script_path).sub_ext(".log")
  12. logger = Logger.new(log_file, 7, 1024*1024)
  13. logger.level = Logger::DEBUG
  14. logger.debug "PID: #{Process.pid}"
  15.  
  16. shutdown = false
  17. on_int_or_term_signal = proc {
  18. p "Received shutdown signal"
  19. # signal handler may have already deleted the PIDFILE
  20. pid_file.unlink if pid_file.exist?
  21. if $ERROR_INFO
  22. p "#{$ERROR_INFO} - POS: #{$ERROR_POSITION}"
  23. end
  24. shutdown = true
  25. }
  26. trap("INT", &on_int_or_term_signal)
  27. # trap("TERM", &on_int_or_term_signal)
  28. # at_exit(&on_int_or_term_signal)
  29.  
  30. workers = 1.upto(4).map { |i|
  31. Thread.new(i) do |j|
  32. loop do
  33. break if shutdown
  34.  
  35. logger.debug "Thread ##{j} about to go to sleep"
  36. sleep(j)
  37. end
  38. end
  39. }
  40.  
  41. loop do
  42. sleep 1
  43.  
  44. if shutdown
  45. workers.each.with_index do |worker, i|
  46. res = begin
  47. worker.join(i + 1)
  48. rescue => err
  49. logger.error err.message
  50. logger.error err.backtrace.join("\n")
  51. true # thread already killed
  52. end
  53.  
  54. Thread.kill(worker) unless res
  55. end
  56.  
  57. break
  58. end
  59. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement