skip to Main Content

Here’s an output from Capistrano:

02:05 sidekiq:start
      01 sudo service sidekiq start index=1
      01 sidekiq (1) start/running, process 26392
    ✔ 01 deployer@IP 0.721s
      02 sudo service sidekiq start index=2
      02 sidekiq (2) start/running, process 26505
    ✔ 02 deployer@IP 0.728s

After logging to the server and ps aux | grep sidekiq, there’s no process running. So I go back to my local terminal tab and run

cap staging sidekiq:start

and the new Sidekiq process shows up for a few seconds on the server:

ps aux | grep sidekiq
deployer   489 52.0  1.0  76344 40856 ?        Rs   13:13   0:00 /home/deployer/.rvm/rubies/ruby-2.6.3/bin/ruby /home/deployer/.rvm/gems/ruby-2.6.3/bin/bundle exec sidekiq -i 1 -e staging
deployer   695  0.0  0.0  10472   936 pts/0    S+   13:13   0:00 grep --color=auto sidekiq
deployer 32744 42.2  1.4 111100 56188 ?        Rs   13:13   0:02 /home/deployer/apps/app-staging/shared/bundle/ruby/2.6.0/bin/sidekiq -i 2 -e staging

But after a few seconds, it will disappear.

If I run from the server RAILS_ENV=staging bundle exec sidekiq – Sidekiq is running. But the second I restart the server/deploy new code, the Sidekiq process gets killed.

Here are my rake tasks for Sidekiq:

namespace :sidekiq do
  desc "Tells Sidekiq (with signal TSTP) it will be shutting down at some point in the near future."
  " It will stop accepting new work but continue working on current messages"
  task :quiet do
    on roles(:app) do
      puts capture("pgrep -f 'sidekiq' | xargs kill -TSTP")
    end
  end

  desc "Signals that Sidekiq should shut down within the -t timeout option given at start-up (see config/sidekiq.yml)."
  " It will stop accepting new work, but continue working on current messages (as with USR1)."
  " Any workers that do not finish within the timeout are forcefully terminated"
  " and their messages are pushed back to Redis to be executed again when Sidekiq starts up. "
  task :terminate_gracefully do
    on roles(:app) do
      puts capture("pgrep -f 'sidekiq' | xargs kill -TERM")
    end
  end


  desc "Starts sidekiq workers. Fails if there are already running processes."
  task :start do
    on roles(:app) do
      pids =  capture("pgrep -f 'sidekiq'; true")
      puts "Present sidekiq process pids #{pids}"
      if pids.split("n").count == 1
        # For each worker service with index ID is called
        execute "sudo service sidekiq start index=1"
        execute "sudo service sidekiq start index=2"
      else
        puts "##------------------------------------------------------------------##"
        puts "Sidekiq was not terminated before start execution. Wait untils it is finished and start it again (or kill the processes)."
        puts "##------------------------------------------------------------------##"
      end
    end
  end

  task :restart do
    invoke "sidekiq:terminate_gracefully"
    invoke "sidekiq:start"
  end
end

Why is Sidekiq v6 not being automatically started by Capistrano?

2

Answers


  1. Sidekiq 6.0 no longer depend on daemonization, see breaking changes:
    https://github.com/mperham/sidekiq/blob/master/Changes.md#60

    BREAKING CHANGE Remove the daemonization, logfile and pidfile
    arguments to Sidekiq. Use a proper process supervisor (e.g. systemd or
    foreman) to manage Sidekiq. See the Deployment wiki page for links to
    more resources.

    Check out this topic how to properly setup systemd with sidekiq 6.0:
    https://github.com/seuros/capistrano-sidekiq/issues/224

    Or official wiki:
    https://github.com/mperham/sidekiq/wiki/Deployment#running-your-own-process

    Login or Signup to reply.
  2. In 6.0 sidekiq removed daemonization support, which was used by many init script and capistrano examples out there. This was done to urge people into using proper process managers like systemd, which provide many stability and manageability benefits.

    You should modify your deployment accordingly (actually, many projects did not notice this change because older versions also are better to run this way). See official wiki on how to setup deployment.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search