После обновления Sidekiq до v6 он не запускается автоматически - PullRequest
0 голосов
/ 24 марта 2020

Вот вывод из 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

После входа на сервер и ps aux | grep sidekiq процесс не выполняется. Поэтому я go возвращаюсь на вкладку локального терминала и запускаю

cap staging sidekiq:start

, и новый процесс Sidekiq появляется на сервере в течение нескольких секунд:

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

Но через несколько секунд он исчезнет.

Если я запускаю с сервера RAILS_ENV=staging bundle exec sidekiq - Sidekiq запущен. Но когда я перезагружаю сервер / развертываю новый код, процесс Sidekiq убивается.

Вот мои грабли для 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

Почему Sidekiq v6 не запускается автоматически Capistrano?

Ответы [ 2 ]

3 голосов
/ 24 марта 2020

Sidekiq 6.0 больше не зависит от демонизации, см. Критические изменения: https://github.com/mperham/sidekiq/blob/master/Changes.md#60

BREAKING CHANGE Удалите аргументы daemonization, logfile и pidfile в Sidekiq. Используйте соответствующего руководителя процесса (например, systemd или foreman) для управления Sidekiq. См. Страницу вики развертывания для ссылок на дополнительные ресурсы.

Ознакомьтесь с этой топикой c, как правильно настроить systemd с sidekiq 6.0: https://github.com/seuros/capistrano-sidekiq/issues/224

Или официальная вики: https://github.com/mperham/sidekiq/wiki/Deployment#running -your-own-process

1 голос
/ 24 марта 2020

В 6.0 sidekiq удалена поддержка демонизации , которая использовалась многими сценариями инициализации и примерами capistrano. Это было сделано для того, чтобы побудить людей использовать правильных менеджеров процессов, таких как systemd, которые обеспечивают множество преимуществ в плане стабильности и управляемости.

Вы должны соответствующим образом изменить свое развертывание (на самом деле, многие проекты не заметили это изменение, поскольку более старые версии также лучше бежать по этому пути). См. официальную вики о том, как настроить развертывание.

...