Czy w Sidekiq są komendy konsolowe, które sprawdzają, co znajduje się w kolejce i czyściły kolejkę?
Jestem przyzwyczajony do używania metody delayed_jobs wchodzenia do konsoli, aby zobaczyć, co jest w kolejce, i łatwość czyszczenia kolejki w razie potrzeby. Czy są do tego podobne komendy w Sidekiq? Dzięki!
9 answers
Nigdy nie używałem Sidekiq, więc możliwe, że istnieją metody tylko do przeglądania zadań w kolejce, ale tak naprawdę byłyby to tylko owijki wokół poleceń Redis, ponieważ to w zasadzie wszystko Sidekiq (i Resque) to:
# 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
Niestety usunięcie konkretnego zadania jest trochę trudniejsze, ponieważ trzeba by skopiować jego dokładną wartość:
# Remove a specific job from a queue
Sidekiq.redis { |r| r.lrem "queue:app_queue", -1, "the payload string stored in Redis" }
Możesz zrobić to wszystko jeszcze łatwiej przez 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"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-02 05:25:32
Istnieje ergonomiczne APIdo przeglądania i zarządzania kolejkami .
Domyślnie nie jest wymagane.
require 'sidekiq/api'
Oto fragment:
# 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
Możesz również uzyskać statystyki zbiorcze.
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-21 18:28:37
Jeśli jest jakaś zaplanowana praca. Możesz usunąć wszystkie zadania używając następującego polecenia:
Sidekiq::ScheduledSet.new.clear
Jeśli są kolejki do usunięcia wszystkich zadań, możesz użyć następującego polecenia:
Sidekiq::Queue.new.clear
Zadania Retries można również usunąć za pomocą następującego polecenia:
Sidekiq::RetrySet.new.clear
Więcej informacji znajduje się pod poniższym linkiem, możesz dokonać zakupu: https://github.com/mperham/sidekiq/wiki/API
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-18 03:19:33
Istnieje API umożliwiające dostęp do informacji w czasie rzeczywistym o pracownikach, kolejkach i zadaniach.
Odwiedź tutaj https://github.com/mperham/sidekiq/wiki/API
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 07:51:36
Obejściem problemu jest użycie modułu testowego (wymaga "sidekiq / testing") i opróżnienie workera (MyWorker.drenażu).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-13 20:16:12
A jeśli chcesz wyczyścić kolejkę powtórek sidekiq, to jest to: Sidekiq::RetrySet.new.clear
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-10 04:02:18
$ 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"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-24 06:35:33
W domyślnej kolejce wisiały 'workers' i mogłem je zobaczyć przez interfejs WWW. Ale nie były dostępne z konsoli, jeśli użyłem Sidekiq:: Queue.nowy.rozmiar
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
Używając redis-cli udało mi się je znaleźć
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"
...
Rozwiązaniem było:
irb(main):003:0> Sidekiq.redis { |r| r.del "workers", 0, -1 }
=> 1
Również w Sidekiq v3 jest komenda
Sidekiq::Workers.new.prune
Ale z jakiegoś powodu nie zadziałało dla mnie tego dnia
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-04 14:52:40
Zadanie prowizji dla wyczyszczenia wszystkich kolejek sidekiq:
namespace :sidekiq do
desc 'Clear sidekiq queue'
task clear: :environment do
require 'sidekiq/api'
Sidekiq::Queue.all.each(&:clear)
end
end
Użycie:
rake sidekiq:clear
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-26 13:36:33