Sidekiq/Redis ставит в очередь несуществующее задание
Я создал простое тестовое задание для Sidekiq и добавил его в свой schedule.yml
файл для Sidekiq Cron.
Вот моя тестовая работа:
module Slack
class TestJob < ApplicationJob
queue_as :default
def perform(*args)
begin
SLACK_NOTIFIER.post(attachments: {"pretext": "test", "text": "hello"})
rescue Exception => error
puts error
end
end
end
end
В SLACK_NOTIFIER
вот простой клиент API для Slack, который я инициализирую при запуске.
И в моем schedule.yml
:
test_job:
cron: "* * * * *"
class: "Slack::TestJob"
queue: default
description: "Test"
Поэтому я хотел, чтобы он запускался каждую минуту, и он работал именно так, как я ожидал.
Однако теперь я удалил файл задания и удалил задание из schedule.yml
, и он по-прежнему пытается выполнить задание каждую минуту. Я зашел в панель управления sidekiq и вижу несколько повторных попыток выполнения этой работы. Независимо от того, сколько раз я их всех убивал, они продолжают приходить.
Я несколько раз пытался выключить сервер Redis и sidekiq. Я пробовал выключить свой компьютер (конечно, после убийства серверов). Он по-прежнему планирует эти задания и прерывает другие мои задания, потому что вызывает следующее исключение:
NameError: uninitialized constant Slack::TestJob
Я выполнил поиск "TestJob" по всему проекту, но результатов не получил.
У меня был открытый сервер Redis с этой работой примерно на 10 минут...
Может быть, что-то осталось в базе данных Redis? Я заглянул вredis-cli
документацию, но я не думаю, что это мне поможет.
2 ответа
Попробуйте позвонить $ FLUSHALL
в Redis cli...
Кроме этого...
Документация sidekiq-cron, похоже, предполагает, что вы проверяете наличиеschedule.yml
явно...
#initializers/sidekiq.rb
schedule_file = "config/schedule.yml"
if File.exist?(schedule_file) && Sidekiq.server?
Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
end
По умолчанию Sidekiq повторяет неудачное задание 25 раз. Поскольку работы не существует, она терпит неудачу... каждый раз; Sidekiq знает только о том, что задание не выполнено (поскольку попытка выполнить несуществующее задание вызовет исключение), поэтому он помечает его для повторной попытки... 25 раз. Поскольку вы планировали это задание каждую минуту, у вас, вероятно, была ТОННА этих неудачных заданий в очереди для повторной попытки. Вы можете:
- Подождите ~3 недели, чтобы достичь максимального количества повторных попыток
- Если у вас настроена страница пользовательского интерфейса для Sidekiq, вы можете просмотреть и удалить эти задания на вкладке "Повторные попытки".
- Изучите документацию Redis CLI, чтобы найти способ определить эти конкретные задания и удалить их (или очистить все это, если вы не беспокоитесь о потере других заданий)