記事を書いた環境情報
$ lsb_release -d
Description: Ubuntu 14.04.1 LTS
$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [i686-linux]
$ gem list | grep delayed
delayed_job (4.0.6)
delayed_job_active_record (4.0.3)
本文
各ドキュメントにはstopでワーカーがいくつあっても問題なく停止するように書かれているけど、実際は停止しませんでした。
$ bin/delayed_job start -n 2
delayed_job.0: process with pid 19532 started.
delayed_job.1: process with pid 19538 started.
$ bin/delayed_job stop
# なにも表示されない
停止させるには起動しているワーカーの数を指定する必要があります。
$ bin/delayed_job stop -n 2
delayed_job.0: trying to stop process with pid 19532...
delayed_job.0: process with pid 19532 successfully stopped.
delayed_job.1: trying to stop process with pid 19538...
delayed_job.1: process with pid 19538 successfully stopped.
なのでコマンドからでは無くて、スクリプト内で起動しているワーカー数を見て停止させるには以下のようにファイル数を取得する必要があります。
# pid格納先
pid_dir = "tmp/delayed_job/pids"
# ワーカー数
worker_num = Dir.glob("#{pid_dir}/delayed_job*").size
# 停止コマンドの実行
puts `ruby bin/delayed_job stop --pid-dir #{pid_dir} -n {worker_num.to_s}`
うーん、以前はこんな事をしなくても停止していた気がします。