Долгосрочные задания delayed_job остаются заблокированными после перезапуска на Heroku

Когда работник Heroku перезапускается (по команде или в результате развертывания), Heroku отправляетSIGTERM на рабочий процесс. В случаеdelayed_job,SIGTERM сигнал пойман и затем работник прекращает выполнение после того, как текущее задание (если оно есть) было остановлено.

Если рабочий займет много времени, чтобы закончить, то Heroku отправитSIGKILL, В случаеdelayed_jobэто оставляет заблокированную работу в базе данных, которую другой работник не сможет получить.

Я хотел бы убедиться, что задания в конечном итоге завершатся (если только нет ошибки). Учитывая это, как лучше всего подойти к этому?

Я вижу два варианта. Но я бы хотел получить другой вклад:

Modify delayed_job to stop working on the current job (and release the lock) when it receives a SIGTERM. Figure out a (programmatic) way to detect orphaned locked jobs and then unlock them.

Какие-нибудь мысли?

Ответы на вопрос(6)

Ваш ответ на вопрос