0

多くのサービスを rinit で実行していますが、これは素晴らしいものです。

最近、すばらしい Sidekiq を使い始めました。runit で実行しています。問題は、「sv stop」を実行するときです。プロセスを停止していません。restart を呼び出すと、実際には sidekiq の別のインスタンスが起動され、古いインスタンスは実行されたままになります。

サンプルの実行ファイルは次のとおりです。

#!/bin/sh
cd /PATH_TO_SIDEKIQ
exec 2>&1
export DB_POOL_SIZE=25
exec bundle exec sidekiq -e production 2>&1 | logger -p local2.info -t sidekiq

supervise/pid の pid ファイルは、実行中の pid と一致します。

ありがとう、ジェレミー

4

2 に答える 2

0

Capistrano 3の私のソリューション:

set :sidekiq_runit_service_name, "sidekiq"
set :sidekiq_default_hooks, ->{ true }
set :sidekiq_cmd, ->{ "#{fetch(:bundle_cmd, "bundle")} exec sidekiq" }
set :sidekiqctl_cmd, ->{ "#{fetch(:bundle_cmd, "bundle")} exec sidekiqctl" }
set :sidekiq_timeout, ->{ 10 }
set :sidekiq_role,    ->{ :app }
set :sidekiq_pid,     ->{ "#{current_path}/tmp/pids/sidekiq.pid" }

namespace :sidekiq do

  desc "Quiet sidekiq (stop accepting new work)"
  task :quiet do
    on roles(fetch(:sidekiq_role)) do
      execute "if [ -d #{current_path} ] && [ -f #{fetch(:sidekiq_pid)} ] && kill -0 `cat #{fetch(:sidekiq_pid)}`> /dev/null 2>&1; then cd #{current_path} && #{fetch(:sidekiqctl_cmd)} quiet #{fetch(:sidekiq_pid)} ; else echo 'Sidekiq is not running'; fi"
    end
  end

  desc "Stop sidekiq"
  task :stop do
    on roles(fetch(:sidekiq_role)) do
      execute "sv stop #{fetch(:sidekiq_runit_service_name)}; true"
      execute "if [ -d #{current_path} ] && [ -f #{fetch(:sidekiq_pid)} ] && kill -0 `cat #{fetch(:sidekiq_pid)}`> /dev/null 2>&1; then cd #{current_path} && #{fetch(:sidekiqctl_cmd)} stop #{fetch(:sidekiq_pid)} #{fetch :sidekiq_timeout} ; else echo 'Sidekiq is not running'; fi"
    end
  end

  desc "Start sidekiq"
  task :start do
    on roles(fetch(:sidekiq_role)) do
      execute "sv start #{fetch(:sidekiq_runit_service_name)}"
    end
  end

  desc "Restart sidekiq"
  task :restart do
    invoke 'sidekiq:stop'
    invoke 'sidekiq:start'
  end

end

if fetch(:sidekiq_default_hooks)
  before 'deploy:started',   "sidekiq:quiet"
  after  'deploy:updated',   "sidekiq:stop"
  after  'deploy:reverted',  "sidekiq:stop"
  after  'deploy:published', "sidekiq:start"
  after  'deploy:restart',   "sidekiq:restart"
end
于 2014-11-05T12:37:09.087 に答える