LoginSignup
0
0

sidekiq-cron で設定した定期実行処理が schedule ファイルから削除しても停止しない

Last updated at Posted at 2024-05-17

sidekiq-cron で動かしていた定期実行ジョブを停止しようと際に詰まったので備忘録。

背景

config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
  config.on(:startup) do
    schedule_file = "config/schedule.yml"

    if File.exist?(schedule_file)
      schedule = YAML.load_file(schedule_file)

      Sidekiq::Cron::Job.load_from_hash!(schedule, source: "schedule")
    end
  end
end
config/schedule.yml
test_hello_world:
  cron: "*/1 * * * * " # 1分ごとに実行
  class: "HelloWorldWorker"
  queue: "schedule"
  description: "1分に1回 Hello World! を出力します。"
config/schedule.yml
-  test_hello_world:
-    cron: "*/1 * * * * " # 1分ごとに実行
-    class: "HelloWorldWorker"
-    queue: "schedule"
-    description: "1分に1回 Hello World! を出力します。"

上記のように、もともと設定されていたスケジュールを削除しても定期実行処理が停止しないという現象に遭遇。

Sidekiq::Cron::Job.find("test_hello_world")
=> #<Sidekiq::Cron::Job:xxxxxxxxxxxxxxxxxx
 @active_job=false,
 @active_job_queue_name_delimiter="",
 @active_job_queue_name_prefix="",
 @args=[],
 @cron="*/1 * * * * ",
 @date_as_argument=false,
 @description="1分に1回 Hello World! を出力します。",
 @errors=[],
 @fetch_missing_args=true,
 @klass="HelloWorldWorker",
 @last_enqueue_time=nil,
 @message="{\"queue\":\"schedule\",\"class\":\"HelloWorldWorker\",\"args\":[]}",
 @name="test_hello_world",
 @parsed_cron=#<Fugit::Cron:xxxxxxxxxxxxxxxxxx @cron_s=nil, @day_and=nil, @hours=nil, @minutes=nil, @monthdays=nil, @months=nil, @original="*/1 * * * * ", @seconds=[0], @timezone=nil, @weekdays=nil, @zone=nil>,
 @queue="schedule",
 @queue_name_with_prefix="schedule",
 @source="dynamic",
 @status="enabled",
 @symbolize_args=false>

↑ Sidekiq を再起動してもまだ残っている

原因および解決方法

# destroy all jobs
Sidekiq::Cron::Job.destroy_all!

# destroy job by its name
Sidekiq::Cron::Job.destroy "Job Name"

# destroy found job
Sidekiq::Cron::Job.find('Job name').destroy

上記の通り、Job を destroy しないとダメだったらしい。(schedule ファイルから削除するだけでは不十分?)

Sidekiq::Cron::Job.find("test_hello_world").destroy
2024-05-17T08:01:05.754Z pid=243 tid=5tb INFO: Cron Jobs - deleted job with name: test_hello_world
=> 99

Sidekiq::Cron::Job.find("test_hello_world")
=> nil

↑無事消えた。

GUI で操作したい場合、下記のようなルーティングを設定することで Sidekiq ダッシュボード(/sidekiq)内に「cron」タブが現れるので、そちらから無効化/削除も可能。

require "sidekiq/web"
require "sidekiq/cron/web"

Rails.application.routes.draw do
  mount Sidekiq::Web, at: "/sidekiq"
end

スクリーンショット 2024-05-17 17.07.03.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0