You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sidekiq旧版本定时任务删除后反复复活,如何永久移除?

永久移除Sidekiq Cron旧定时任务的方案

针对你遇到的bundle_resolve_job(对应Jobs::Order::Bundle::ResolvePayingJob)反复复活的问题,核心原因是Sidekiq Cron的定时任务配置存储在Redis中,而非仅依赖本地的config/schedule.yml,即使删掉本地配置,Redis里的旧任务仍会持续生效。以下是分步解决方法:

1. 定位并删除Redis中的旧定时任务

打开Rails控制台(rails c),执行以下命令彻底清除Redis中的目标定时任务:

# 查找目标任务
job = Sidekiq::Cron::Job.find('bundle_resolve_job')
# 销毁任务(从Redis中移除配置)
job.destroy if job.present?

验证删除结果:执行Sidekiq::Cron::Job.all.to_yaml,确认bundle_resolve_job已不在返回列表中。

2. 精准清理残留的重试/死信任务

虽然你之前通过Web UI删除过,但可能存在遗漏,可通过控制台精准清理该任务的残留实例:

# 清理重试队列中的目标任务
Sidekiq::RetrySet.new.each do |job|
  job.delete if job.klass == 'Jobs::Order::Bundle::ResolvePayingJob'
end

# 清理死信队列中的目标任务
Sidekiq::DeadSet.new.each do |job|
  job.delete if job.klass == 'Jobs::Order::Bundle::ResolvePayingJob'
end

3. 排查项目中是否存在动态注册逻辑

检查项目中是否有代码动态注册了该定时任务(而非仅依赖config/schedule.yml):

  • 搜索项目文件中是否存在Sidekiq::Cron::Job.create、Sidekiq::Cron::Job.schedule等关键字,关联bundle_resolve_job或ResolvePayingJob的代码
  • 检查config/initializers/目录下的Sidekiq相关初始化脚本,确认是否有硬编码的任务注册逻辑

如果找到动态注册的代码,直接删除对应片段。

4. 重启Sidekiq进程

最后重启所有Sidekiq worker进程,确保进程加载最新的配置,避免缓存旧任务信息:

# 根据你的部署方式重启,例如使用systemd:
sudo systemctl restart sidekiq
# 或使用capistrano部署的话:
cap production sidekiq:restart

完成以上步骤后,bundle_resolve_job应该不会再复活。

内容的提问来源于stack exchange,提问作者NooBskie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:24:29