Ruby製のジョブキューサーバーであるResqueはHerokuのWorkerプロセスで動かそうとすると一つ問題があった。 シグナルハンドリングの問題なんだけど、Herokuはworkerプロセスを再起動するときにSIGTERMを送り、プロセスが終了したら再度プロセスを起動する。SIGTERMを送ってworkerが10秒間プロセスが終了しなかったらSIGKILLで強制終了させる。のでworker側はSIGTERMを受け取ったら10秒以内に安全に(今あるジョブを終了するなりなんなりして)プロセスを終了する必要がある。 そのようなHerokuの挙動は以下に書いてある。 Managing Heroku Processes | Heroku Dev Center 一方で、Resqueのシグナルハンドリングがどうなっているかというと、SIGTERMで強制終了するようになってる。 resque/REA

