কিউতে কী আছে তা দেখার জন্য এবং সাইডিকিকের সারিটি সাফ করার জন্য কি কনসোল আদেশ রয়েছে?


97

আমি কাতারে কী আছে তা দেখার জন্য কনসোলটিতে যাওয়ার জন্য বিলম্বিত_জবস পদ্ধতিটি ব্যবহার করতে অভ্যস্ত এবং প্রয়োজনে কাতার সাফ করার সহজতা। এর জন্য সাইডকিখে কি একই রকম আদেশ রয়েছে? ধন্যবাদ!


4
অন্যদের দ্বারা উল্লিখিত হিসাবে, নীচে নির্বাচিত উত্তর হ্রাস করা হয়।
emf

উত্তর:


90

আমি সাইডিকিক কখনও ব্যবহার করি নি, সুতরাং এটি সম্ভব যে কেবল সারিযুক্ত কাজগুলি দেখার জন্য পদ্ধতি রয়েছে তবে তারা সত্যই কেবল রেডিস কমান্ডের চারপাশে মোড়ানো হতে পারে, কারণ এটি মূলত সমস্ত সাইডিক (এবং রেসকিউ) হ'ল:

# See workers
Sidekiq::Client.registered_workers

# See queues
Sidekiq::Client.registered_queues

# See all jobs for one queue
Sidekiq.redis { |r| r.lrange "queue:app_queue", 0, -1 }

# See all jobs in all queues
Sidekiq::Client.registered_queues.each do |q|
  Sidekiq.redis { |r| r.lrange "queue:#{q}", 0, -1 }
end

# Remove a queue and all of its jobs
Sidekiq.redis do |r| 
  r.srem "queues", "app_queue"
  r.del  "queue:app_queue"
end

দুর্ভাগ্যক্রমে, একটি নির্দিষ্ট কাজ অপসারণ করা আরও কিছুটা কঠিন কারণ আপনাকে এর সঠিক মানটি অনুলিপি করতে হবে:

# Remove a specific job from a queue
Sidekiq.redis { |r| r.lrem "queue:app_queue", -1, "the payload string stored in Redis" }

আপনি এগুলি আরও সহজেই এর মাধ্যমে করতে পারেন redis-cli:

$ redis-cli
> select 0 # (or whichever namespace Sidekiq is using)
> keys * # (just to get an idea of what you're working with)
> smembers queues
> lrange queues:app_queue 0 -1
> lrem queues:app_queue -1 "payload"

আপনি কি সাইকিকের ফর্ম্যাটে রেসিড শিড জবগুলি আমদানি / মাইগ্রেট করার ভাল উপায় দেখেছেন? সাইডিকিকের নামস্থানটি 'রেসকিউ' তে সেট করা আমার যা বলতে পারে তা থেকে নির্ধারিত কাজগুলি বেছে নেবে বলে মনে হয় না। ধন্যবাদ!
ব্রায়ান আর্মস্ট্রং

32
এখানে প্রদত্ত কয়েকটি সমাধান হ্রাস করা হয়েছে।
পিটার ওয়াগনেট

@ ব্রায়ানআর্মস্ট্রং Sidekiq.redis {| r | r.zrange ( "তফসিল", 0, -1, {withscores: সত্য})} আমাকে উল্লেখ কাজ stackoverflow.com/questions/16009639/...
পল

4
যেমন ওয়াগনেট উপরে উল্লেখ করেছে, এই উদাহরণগুলি পুরানো; মিরক নীচের দিকে ইঙ্গিত করেছেন, সর্বশেষ ডক্স ডাব্লু / উদাহরণগুলি উইকিতে রয়েছে: github.com/mperham/sidekiq/wiki/API
অদ্ভুততা

4
Sidekiq::Client.registered_queues এর সাথে Sidekiq::Queue.allএবং Sidekiq::Client.registered_workersসাথে প্রতিস্থাপন করা হয়েছে Sidekiq::Workers.new, দেখুন: github.com/mperham/sidekiq/blob/…
মার্টিন

136

সারি দেখার এবং পরিচালনা করার জন্য একটি এর্গোনমিক এপিআই রয়েছে

এটি ডিফল্টরূপে প্রয়োজন হয় না।

require 'sidekiq/api'

এখানে উদ্ধৃতাংশ:

# get a handle to the default queue
default_queue = Sidekiq::Queue.new 

# get a handle to the mailer queue
mailer_queue = Sidekiq::Queue.new("mailer") 

# How many jobs are in the default queue?
default_queue.size # => 1001

# How many jobs are in the mailer queue?
mailer_queue.size # => 50

#Deletes all Jobs in a Queue, by removing the queue.    
default_queue.clear

আপনি কিছু সংক্ষিপ্ত পরিসংখ্যানও পেতে পারেন।

stats = Sidekiq::Stats.new

# Get the number of jobs that have been processed.
stats.processed # => 100

# Get the number of jobs that have failed.    
stats.failed # => 3

# Get the queues with name and number enqueued.
stats.queues # => { "default" => 1001, "email" => 50 }

#Gets the number of jobs enqueued in all queues (does NOT include retries and scheduled jobs).
stats.enqueued # => 1051 

9
এই মুহূর্তে (আগস্ট 2016) কাজ করে এমন পন্থা। গৃহীত উত্তরটি ২০১৩ সালের পুরানো।
জান ক্লিমো

10

যদি কোন নির্ধারিত কাজ হয়। আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে সমস্ত কাজ মুছতে পারেন:

Sidekiq::ScheduledSet.new.clear

যদি কোনও কাতারে আপনি সমস্ত কাজ মুছে ফেলতে চেয়েছিলেন তবে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

  Sidekiq::Queue.new.clear

পুনরায় চেষ্টা করুন নিম্নলিখিত কমান্ড দ্বারা চাকরীগুলিও সরানো যেতে পারে:

Sidekiq::RetrySet.new.clear

নীচের লিঙ্কে এখানে আরও তথ্য রয়েছে, আপনি চেকআউট করতে পারেন: https://github.com/mperham/sidekiq/wiki/API



2

একটি কার্যপ্রণালী হ'ল টেস্টিং মডিউলটি ('সাইডকিক / টেস্টিং' প্রয়োজন) এবং কর্মী (মাই ওয়ার্কার.ড্রেইন) নিষ্কাশন করা।


2

সেখানে ডিফল্ট কাতারে ফাঁসি দেওয়া 'শ্রমিক' ছিল এবং আমি ওয়েব ইন্টারফেস হলেও তাদের দেখতে সক্ষম হয়েছি। তবে আমি সাইডকিক :: ক্যু.নেউ.সাইজ ব্যবহার করলে কনসোল থেকে সেগুলি পাওয়া যায় নি

irb(main):002:0> Sidekiq::Queue.new.size
2014-03-04T14:37:43Z 17256 TID-oujb9c974 INFO: Sidekiq client with redis options {:namespace=>"sidekiq_staging"}
=> 0

রেডিস-ক্লিপ ব্যবহার করে আমি তাদের সন্ধান করতে সক্ষম হয়েছি

redis 127.0.0.1:6379> keys *
    1) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:7635c39a29d7b255b564970bea51c026-69853672483440:default"
    2) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:0cf585f5e93e1850eee1ae4613a08e45-70328697677500:default:started"
    3) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:7635c39a29d7b255b564970bea51c026-69853672320140:default:started"
    ...

সমাধানটি ছিল:

irb(main):003:0>  Sidekiq.redis { |r| r.del "workers", 0, -1 }
=> 1

Sidekiq v3 এ একটি কমান্ডও রয়েছে

Sidekiq::Workers.new.prune

কিন্তু কোনও কারণে এটি আমার পক্ষে কার্যকর হয়নি


2

এবং আপনি যদি সাইডিকিক পুনরায় চেষ্টা করুন সারিটি সাফ করতে চান তবে এটি হ'ল: Sidekiq::RetrySet.new.clear


2
$ redis-cli
> select 0 # (or whichever namespace Sidekiq is using)
> keys * # (just to get an idea of what you're working with)
> smembers queues
> lrange queue:queue_name 0 -1 # (queue_name must be your relevant queue)
> lrem queue:queue_name -1 "payload"

9
keys *উত্পাদনে কখনও চালাবেন না যদি না আপনি কেবল সাইডিকিকের জন্য পুনরায় রঙ ব্যবহার করেন। বিশেষত আপনার বড় ডেটাसेट (ক্যাশে, ইত্যাদি) থাকলে এটি চালাবেন না। রেডিস একক থ্রেডেড এবং keys *ব্লকস - এটি বড় ডেটাসেটগুলিতে (বেশিরভাগ জিবিএস) কয়েক মিনিটের ডাউনটাইমের ফলাফল হতে পারে।
টিম্বুর

1

সমস্ত সাইডিকিক সারি পরিষ্কার করার জন্য রেক টাস্ক:

namespace :sidekiq do
  desc 'Clear sidekiq queue'
  task clear: :environment do
    require 'sidekiq/api'
    Sidekiq::Queue.all.each(&:clear)
  end
end

ব্যবহার:

rake sidekiq:clear
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.