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

如何停止多pool启动的delayed_job工作池中的单个Worker?

停止Delayed Job工作池中的单个Worker进程

要停止你启动的这个Delayed Job工作池里的单个Worker,有几种可靠的方法,具体看你的需求:

方法1:使用Delayed Job官方脚本(推荐)

Delayed Job的脚本本身支持针对特定编号的Worker进行停止操作。你只需要在命令里指定Worker的编号(对应pid文件名里的数字,比如delayed_job.0.pid对应的编号是0):

/usr/bin/env RAILS_ENV=production /var/www/project/current/script/delayed_job stop 0

这个命令会给目标Worker发送优雅终止信号,它会处理完当前正在执行的任务后再退出,避免任务丢失。

方法2:直接通过PID终止进程

如果你知道目标Worker的PID(可以从对应的pid文件里读取),也可以直接用kill命令发送终止信号:

# 先读取PID文件里的进程ID,再发送终止信号
kill $(cat /var/www/project/shared/tmp/pids/delayed_job.0.pid)

默认的kill命令发送的是TERM信号,同样会让Worker优雅退出。不要用kill -9强制终止,那样会导致正在处理的任务中断,可能引发数据不一致。

注意:配合Monit的额外操作

因为你用Monit监控这些Worker进程,直接停止Worker后,Monit可能会检测到进程消失,自动重启它。所以如果你希望Worker保持停止状态,需要先告诉Monit暂时停止监控这个进程:

monit stop delayed_job.0

等你需要重启这个Worker时,再用monit start delayed_job.0重新启动即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:19:01