Ausgabe
Wir verwenden Hangfire v.7 seit langem mit SQL Server und haben viele verzögerte Jobs. Ich möchte diejenigen finden, die in einem bestimmten Zeitraum ausgeführt werden sollen (z. B. von 2030-01-01T01:00:00 bis 2030-01-01T03:00:00) und sie um N Stunden verschieben. Ich gehe davon aus, dass es einige Spalten in der Hangfire-Datenbank gibt, die die Ausführungszeit jedes Jobs angeben. Ist es gültig? Wie kann ich die Ausführungszeit verzögerter Jobs über ein SQL-Skript ändern?
Lösung
Ich habe den Hangfire-Quellcode gelesen und den Prozess ab verfolgt BackgroundJob.Schedule
, der die API-Methode zum Erstellen eines neuen verzögerten Jobs ist, bis die Änderungen an die DB übertragen werden. Dies ist das DB-Schema:
Jeder verzögerte Job hat einen Eintrag in der [Job]
Tabelle und seine Ausführungsdaten werden in der Tabelle gespeichert [State]
. Ein nicht ausgeführter geplanter Job hat einen Statuseintrag wie diesen:
Die [Data]
Spalte enthält Planungsdetails im JSON-Format. Der Wert von EnqueueAt
gibt an, wann der Job mit der Ausführung im UNIX-Zeitstempel beginnen soll. Für SQL Server v.16 oder höher kann ein Skript wie dieses nützlich sein:
UPDATE [State]
SET JSON_MODIFY([Data], '$.EnqueueAt', '0000000000000'/*put your time stamp here*/)
WHERE condition
Beantwortet von – ThirdDeveloper
Antwort geprüft von – Dawn Plyler (FixError Volunteer)