Когда рабочий из Heroku перезапускается (либо по команде, либо в результате развертывания), Heroku отправляет SIGTERM
в рабочий процесс. В случае delayed_job
сигнал SIGTERM
пойман, а затем рабочий прекращает выполнение после того, как текущее задание (если оно есть) остановлено,
Если работник добирается до конца, тогда Героку отправит SIGKILL
. В случае delayed_job
это оставляет заблокированное задание в базе данных, которое не будет получено другим работником.
Я бы хотел, чтобы задания заканчивались (если не было ошибок). Учитывая, что лучший способ приблизиться к этому?
Я вижу два варианта. Но я хотел бы получить другой ввод:
- Измените
delayed_job
, чтобы прекратить работу над текущим заданием (и отпустите блокировку), когда он получитSIGTERM
. - Выясните (программный) способ обнаружения сиротских заблокированных заданий, а затем разблокируйте их.
Любые мысли?