Długo działające zadania opóźnionej pracy są zablokowane po ponownym uruchomieniu na Heroku

Kiedy pracownik Heroku zostanie ponownie uruchomiony (na polecenie lub w wyniku wdrożenia), Heroku wysyłaSIGTERM do procesu pracownika. W przypadkudelayed_job, theSIGTERM sygnał zostaje złapany a następnie pracownik przestaje wykonywać po zatrzymaniu bieżącego zadania (jeśli istnieje).

Jeśli robotnik długo się skończy, Heroku wyśleSIGKILL. W przypadkudelayed_job, pozostawia to zablokowane zadanie w bazie danych, które nie zostanie odebrane przez innego pracownika.

Chciałbym upewnić się, że zadania zostaną ostatecznie zakończone (chyba że wystąpi błąd). Biorąc to pod uwagę, jaki jest najlepszy sposób na to?

Widzę dwie opcje. Ale chciałbym uzyskać inne dane wejściowe:

Modyfikowaćdelayed_job przestać pracować nad bieżącym zadaniem (i zwolnić blokadę), gdy otrzymaSIGTERM.Określ (programowy) sposób wykrywania osieroconych zablokowanych zadań, a następnie je odblokuj.

jakieś pomysły?

questionAnswers(6)

yourAnswerToTheQuestion