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

RubyOnRails:如何终止卡住/失效的Resque Worker进程

终止特定Resque进程的脚本方案

方法一:基于Resque API的Ruby脚本

直接借助Resque内置API筛选并终止目标进程,无需解析外部命令,可靠性更高。

require 'resque'

# 配置Resque Redis连接(与项目配置保持一致)
Resque.redis = Redis.new(host: 'localhost', port: 6379, password: 'your_redis_password')

# 获取所有运行中的worker
workers = Resque.workers

# 筛选运行时长超4小时的worker,取前2个
target_workers = workers.select do |worker|
  run_duration = Time.now - worker.started_at
  run_duration > 4 * 3600 # 4小时转换为秒
end.first(2)

# 终止选中的worker
target_workers.each do |worker|
  puts "终止进程: #{worker}"
  worker.terminate! # 优雅终止,需强制终止可替换为worker.kill!
end

方法二:结合ps命令的Shell脚本

若无法运行Ruby脚本,可通过解析进程信息筛选并杀死目标进程:

#!/bin/bash

# 筛选Resque进程,提取运行超4小时的前2个进程ID并终止
# 需根据实际情况调整进程标识(如下例中的"resque:worker")
ps -eo pid,etimes,cmd | grep "resque:worker" | grep -v grep | awk '$2 > 14400' | sort -k2nr | head -2 | awk '{print $1}' | while read pid; do
  echo "终止进程ID: $pid"
  kill -TERM $pid # 优先尝试优雅终止,失败可替换为kill -9 $pid
done

注意事项

  • 确保脚本运行环境可访问Redis(Ruby脚本),或拥有执行ps、kill命令的权限(Shell脚本)。
  • 测试阶段可先移除终止相关代码,仅打印目标进程,确认无误后再执行终止操作。
  • 若Resque worker有自定义进程标识,需调整筛选条件(如命令行中的队列名、任务名)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:02:05