Lang laufende delayed_job-Jobs bleiben nach einem Neustart von Heroku gesperrt
Wenn ein Heroku-Mitarbeiter neu gestartet wird (entweder auf Befehl oder als Ergebnis einer Bereitstellung), sendet HerokuSIGTERM
zum Arbeitsprozess. Im Falle vondelayed_job
, dasSIGTERM
Signal wird abgefangen und der Worker stoppt dann die Ausführung, nachdem der aktuelle Job (falls vorhanden) gestoppt wurde.
Wenn der Arbeiter zu lange braucht, um fertig zu sein, sendet HerokuSIGKILL
. Im Falle vondelayed_job
Dadurch verbleibt ein gesperrter Job in der Datenbank, der nicht von einem anderen Mitarbeiter abgeholt wird.
Ich möchte sicherstellen, dass Jobs eventuell beendet werden (es sei denn, es liegt ein Fehler vor). Was ist angesichts dessen der beste Weg, dies zu erreichen?
Ich sehe zwei Möglichkeiten. Ich hätte aber gerne andere Inputs:
Änderndelayed_job
um die Arbeit an dem aktuellen Job zu beenden (und die Sperre aufzuheben), wenn einSIGTERM
.Finden Sie eine (programmatische) Möglichkeit, verwaiste gesperrte Jobs zu erkennen und sie dann zu entsperren.Irgendwelche Gedanken?