Last active
December 14, 2015 08:28
-
-
Save bartolsthoorn/5057758 to your computer and use it in GitHub Desktop.
This god recipe keeps starting up sidekiq processes every 5~10 seconds, but why?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
God.watch do |w| | |
pid_file = "#{RAILS_ROOT}/tmp/pids/sidekiq.pid" | |
w.name = 'sidekiq' | |
w.interval = 30.seconds | |
w.start = "cd #{RAILS_ROOT} && RAILS_ENV=#{RAILS_ENV} bundle exec sidekiq -C #{RAILS_ROOT}/config/sidekiq.yml -P #{pid_file} -e #{RAILS_ENV} -L #{RAILS_ROOT}/log/sidekiq.log -d" | |
w.stop = "bundle exec sidekiqctl quiet #{pid_file}" | |
w.start_grace = 10.seconds | |
# restart if memory gets too high | |
# w.transition(:up, :restart) do |on| | |
# on.condition(:memory_usage) do |c| | |
# c.above = 200.megabytes | |
# c.times = 2 | |
# end | |
# end | |
w.uid = 'bart' | |
w.gid = 'developers' | |
# determine the state on startup | |
w.transition(:init, { true => :up, false => :start }) do |on| | |
on.condition(:process_running) do |c| | |
c.running = true | |
end | |
end | |
# determine when process has finished starting | |
w.transition([:start, :restart], :up) do |on| | |
on.condition(:process_running) do |c| | |
c.running = true | |
c.interval = 5.seconds | |
end | |
# failsafe | |
on.condition(:tries) do |c| | |
c.times = 5 | |
c.transition = :start | |
c.interval = 5.seconds | |
end | |
end | |
# start if process is not running | |
w.transition(:up, :start) do |on| | |
on.condition(:process_running) do |c| | |
c.running = false | |
end | |
end | |
# New release by capistrano? Restart sidekiq! | |
w.restart_if do |restart| | |
restart.condition(:restart_file_touched) do |c| | |
c.interval = 5.seconds | |
c.restart_file = File.join(RAILS_ROOT, 'tmp', 'restart.txt') | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
2 year later I'l throw an answer here.
Your process has no restart condition, only c.start and c.stop. Pretty sure by default, a god restart command will just call start on its own and not a combination of the 2 (thus spawning a new process).
The reason for the restart every 5 seconds is the restart condition at the cotton. The restart_file_touched will always be true, and you've set an interval to run the command every 5 seconds.