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