Ein Cronjob in Symfony

In Symfony einen Cronjob zu betreiben lässt sich ganz einfach mit einem eigenen Command plus Crontab (Linux) realisieren. Hier ein kurzer Guide für einen Cronjob in Symfony.

Command?

Was ist denn eigentlich ein Command? Zum Beispiel ein php bin/console cache:clear!

Zu einem simplen Command gehört nicht viel: Ein „extend“ von Command, einen Namen vergeben (z.B. „cronjob:execute“) und das, was das Teil eigentlich tun soll, in der dazu passenden Funktion definieren. Braucht man Container Komponenten wird stattdessen das ContainerAwareCommand extended. Damit dürfen auch Doctrine und Co. genutzt werden.

Nach Update auf Version 3.3: Werden weitere Komponenten für den Cronjob benötigt, können diese per Dependency Injection eingefügt werden. Das Kommando ist nämlich auch nur ein Service. Das ContainerAwareCommand ist deprecated und sollte hingegen nicht mehr genutzt werden!

Den Cronjob erstellen

Für einen ordentlichen Cronjob fehlt also nur noch ein Dienst, der zu einer bestimmten Zeit den Befehl php bin/console cronjob:execute aufruft.

Am besten eignet sich dazu der Crontab, der auf Linux für jeden Nutzer im System eingerichtet werden kann. So wird auch sichergestellt, dass die Ausführung des Command mit dem Nutzer „www-data“ (Apache2 oder NGINX) ausgeführt werden kann.

Tipp: Auf https://crontab.guru/ kann man die Ausführungszeit des Crontab testen und validieren. Es macht einen Unterschied, welche Version des Programms auf dem System installiert ist, um gewissen Schreibweisen nutzen zu können.

Auf Windows kann die Aufgabenplanung zum Ausführen des Cronjobs verwendet werden. Es lohnt sich in diesem Fall, ein Bash-Skript mit dem PHP Befehl (und ggf. einem chdir in den Projektordner) zu definieren, das dann von Planer aufgerufen werden kann.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert