Früher musste ich jedes Mal, wenn ich eine Funktion für geplante Aufgaben entwickelte, crontab online bedienen, um Elemente hinzuzufügen, daher möchte ich PHP verwenden, um die Aufgabenelemente in einem einzelnen Projekt einheitlich zu verwalten kann eine Tabelle [ID, Name, Status, Funktion, Timer, letzte_Zeit, erstellt_at] erstellen, um die geplanten Aufgabenskripte im Projekt einheitlich zu speichern. Durch einfache Konfiguration
kann jede geplante Aufgabe in eine einfache Aufgabe abstrahiert werden Klasse, und dann über einen einzigen in crontab konfigurierten Eintrag. Der einheitliche Zugriff darauf reduziert den Aufwand, der durch Online-Code-Änderungen in der
Online-Serverumgebung entsteht.
Dann gibt es einige Fallstricke Da Aufgaben nach Funktion organisiert sind, kann es mehrere Arten von Eigenschaftsklassifizierungen geben, z. B.:
1 Einzelne Ausführung, endet sofort, mehrere Instanzen können gleichzeitig ausgeführt werden
2. Daemon-Prozess, derselbe Es kann jeweils nur eine Instanz ausgeführt werden
Für die zweite Art von Sperrmechanismus ist es auch notwendig, das Programm daran zu hindern aufgrund von Fehlern, Ausnahmen usw. entsperrt werden, was dazu führt, dass eine solche Aufgabe nicht erneut gestartet werden kann
Bei dieser Art von Aufgabe müssen Sie auch überlegen, wie Sie die Aufgabe schnell und einfach beenden können, wenn sich andere Anforderungen ändern während des Betriebs
Ich vermute, dass der Sperrmechanismus jedes Mal über die Aufgaben-ID implementiert wird. Wenn Sie eine Aufgabe ausführen, müssen Sie eine Sperre beantragen. Jede beantragte Sperre hat ein festes Nutzungskontingent . Diese Art von Aufgabe
muss nach Abschluss jedes Stapels einmalig eine Sperre beantragen
lock_id: $task_id lock_{$task_id}_quota: $quota jedes Mal Um eine Sperre erneut zu beantragen, müssen Sie um die Konfigurationsinformationen der Aufgabe in der Aufgabenkonfigurationstabelle erneut zu lesen Wenn die Anwendung fehlschlägt (-1), schließen Sie diese Ausführung und warten Sie auf die nächste Ausführung. Auf diese Weise, wann Sie möchten Um diese Art von Aufgabe abzubrechen, haben Sie zwei Möglichkeiten: 1. Um dieses Mal abzubrechen, setzen Sie einfach das Nutzungskontingent auf -1 2. Diese Aufgabe vollständig verbieten und zurücksetzen Status ist deaktiviert und setzt dann sein Nutzungskontingent auf -1 zurück Nach Abschluss der Aufgabe muss die Sperre aufgehoben werden. Wenn die Sperrfreigabe fehlschlägt, ist ein Mechanismus zur Erkennung ungültiger Sperren erforderlich um die Freigabe zu erzwingen Bestimmung ungültiger Sperren: Der Schlüssel liegt darin, wie festgestellt werden kann, ob die Task-Instanz aktiv ist und ob das Sperrkontingent beendet wurde? Auswirkungen nach dem Töten?