Fast jede Web Anwendung benötigt früher oder später einen oder mehrere CronJobs. Während sich eine geringe Anzahl an CronJobs noch verhältnismäßig gut verwalten lässt, wird es umso komplexerer desto mehr CronJobs eingesetzt werden müssen. Kommt hinzu, dass diese mit verschiedenen Timings ausgeführt werden müssen, hilft oft nur noch ein Scheduler.
CronJobs innerhalb eines Frameworks wie TYPO3 Flow scheinen im ersten Moment nicht ganz einfach, denn wie soll dieser gezielt ausgeführt (inkl. dem gesamten Initialisierungsprozess des Frameworks) werden, ohne dabei einen HTTP Request zu simulieren, welcher ggfs. sogar eine Authentifizierung erfordert?
Dank der CommandControllers des TYPO3 Flow Frameworks können wir die Aufgaben eines CronJobs in einen Service auslagern und von einem CommandController (ReadTheDocs: Custom Commands) auf der Shell ausführen lassen.
Hierzu würde man den CronJob (bspw. durch Eintragung in die crontab) einfach den entsprechenden Command ausführen lassen:
* * * * * /var/www/flow myCommandController:myCommand
Der Scheduler
Kommen wir zurück zum Thema komplexere CronJobs mit unterschiedlichen Timings… Dies würde mit Hilfe der Crontab zu einer komplizierten Angelegenheit führen, welche sich darüber hinaus nicht schön warten lassen würde. (Je nach Hoster hätten wir auch gar keinen Zugriff auf diese Datei sondern müssten uns mit einem mehr oder weniger komfortablen WebInterface zufrieden geben).
Für unseren Scheduler innerhalb von TYPO3 Flow verwenden wir das Scheduler Package von TreeAgency (GitHub ttreeagency/Scheduler) welches die Aufgabe eines CronJob Schedulers herrvoragend übernimmt.
Nach der Installation des Packages werden die einzelnen CronJobs in einzelne Klassen aufgeteilt, welche alle das Interface \Ttree\Scheduler\Task\TaskInterface implementieren und mit einer eigens aus dem Package stammenden Annotation @Scheduler\Schedule(expression=”* * * * *”) getimed werden.
Anschließend sollte nur noch ein jede Minute laufender CronJob auf den entsprechenden Scheduler CommandController des Packages gesetzt werden.
Alle weiteren Wartungen/Timings an den CronJobs können nun bequem bei der Implementierung der Klassen vorgenommen werden.
* * * * * /var/www/flow task:run
Für weitere Informationen und Anleitung befolgt bitte das Readme des Entwicklers auf GitHub (ttreeagency/Scheduler)