Aufgabenplanung in Laravel

In diesem Artikel werden wir eine der aufregenden Funktionen der Laravel Web Framework-Aufgabenplanung durchgehen. In diesem Artikel erfahren Sie, wie Sie mit Laravel geplante Aufgaben in Ihrer Anwendung verwalten können. Darüber hinaus erstellen wir am Ende auch eigene benutzerdefinierte geplante Aufgaben zu Demonstrationszwecken.

Mit dem Laravel-Framework können Sie geplante Aufgaben einrichten, sodass Sie sich keine Gedanken darüber machen müssen, ob sie auf Systemebene eingerichtet werden. Sie können diese komplexe cron-Syntax beim Einrichten geplanter Aufgaben loswerden, da Sie sie in Laravel benutzerfreundlich definieren können.

Wir beginnen den Artikel damit, wie Sie es gewohnt sind, traditionelle Cron-Jobs einzurichten. Anschließend werden wir die Möglichkeiten von Laravel erkunden. In der zweiten Hälfte des Artikels versuchen wir es, indem wir einige benutzerdefinierte geplante Aufgaben erstellen, die einen praktischen Einblick in das Thema vermitteln sollen.

Herkömmliche geplante Task-Einrichtung

In Ihrer täglichen Anwendungsentwicklung sehen Sie häufig eine Situation, in der Sie bestimmte Skripts oder Befehle regelmäßig ausführen müssen. Wenn Sie mit dem * nix-System arbeiten, wissen Sie wahrscheinlich, dass Cron-Jobs diese Befehle verarbeiten. Andererseits werden sie auf Windows-basierten Systemen als geplante Aufgaben bezeichnet.

Werfen wir einen kurzen Blick auf ein einfaches Beispiel für den * nix-basierten Cron-Job.

* / 5 * * * * /web/statistics.sh

Ziemlich einfach - es läuft das statistics.sh Datei alle fünf Minuten!

Obwohl dies ein ziemlich einfacher Anwendungsfall war, befinden Sie sich häufig in einer Situation, in der Sie komplexere Anwendungsfälle implementieren müssen. Andererseits müssen Sie bei einem komplexen System mehrere Cron-Jobs definieren, die in unterschiedlichen Zeitintervallen ausgeführt werden.

Sehen wir uns einige Aufgaben an, die eine komplexe Webanwendung regelmäßig im Backend ausführen muss.

  • Bereinigen Sie nicht benötigte Daten vom Datenbank-Backend.
  • Aktualisieren Sie die Front-End-Caching-Indizes, um sie auf dem neuesten Stand zu halten.
  • Berechnen Sie die Site-Statistiken.
  • E-Mails senden.
  • Sichern Sie verschiedene Site-Elemente.
  • Berichte generieren.
  • Und mehr.

Wie Sie sehen können, gibt es eine Menge Dinge, die darauf warten, regelmäßig und auch in unterschiedlichen Zeitabständen ausgeführt zu werden. Wenn Sie ein erfahrener Systemadministrator sind, ist es ein Kinderspiel, die Cron-Jobs für all diese Aufgaben zu definieren, aber manchmal wünschen wir uns als Entwickler, dass es eine einfachere Lösung gibt.

Zum Glück hat Laravel einen eingebauten Aufgabenplanung API, mit der Sie geplante Aufgaben wie nie zuvor definieren können. Und ja, im nächsten Abschnitt geht es um die Grundlagen der Laravel-Aufgabenplanung.

Der Laravel-Weg

Im vorherigen Abschnitt haben wir die traditionelle Art der Einrichtung von Cron-Jobs durchlaufen. In diesem Abschnitt werden die Besonderheiten von Laravel im Kontext der Taskplanungs-API erläutert.

Bevor wir weitermachen, ist es wichtig zu verstehen, dass die von Laravel bereitgestellte Planungsfunktion wie jede andere Funktion ist und nicht automatisch aufgerufen wird. Wenn Sie also denken, dass Sie nichts auf Systemebene tun müssen, haben Sie kein Glück, würde ich sagen.

Wenn Sie das Laravel-Scheduling-System verwenden möchten, sollten Sie als Erstes den Cron-Job einrichten, der jede Minute ausgeführt wird und den im folgenden Snippet angezeigten Handwerkerbefehl aufruft.

* * * * * php / Pfad zum Projekt / Zeitplan für Handwerker: Führen Sie >> / dev / null 2> & 1 aus

Der obige Handwerkerbefehl ruft den Laravel-Scheduler auf und führt daraufhin alle ausstehenden Cron-Jobs aus, die in Ihrer Anwendung definiert sind.

Natürlich müssen wir noch wissen, wie Sie die geplanten Aufgaben in Ihrer Laravel-Anwendung definieren, und das ist das nächste, worauf wir uns einlassen.

Es ist das Zeitplan Methode der App \ Console \ Kernel Klasse, die Sie verwenden müssen, wenn Sie anwendungsspezifische geplante Aufgaben definieren möchten.

Mach weiter und schnapp dir den Inhalt der app / Console / Kernel.php Datei.

Befehl ('inspirieren') -> stündlich (); 

Wie Sie sehen, liefert der Kerncode selbst ein nützliches Beispiel. Im obigen Beispiel führt Laravel die inspirieren Handwerker stundenweise. Glauben Sie nicht, dass die Syntax überhaupt so intuitiv ist?

In der Tat gibt es mehrere Möglichkeiten, mit denen Sie in Laravel Zeitplanaufgaben definieren können:

  • Verwenden Sie die Schließung / Callable.
  • Rufen Sie den handwerklichen Befehl auf.
  • Führen Sie den Shell-Befehl aus.

Darüber hinaus gibt es eine Vielzahl von integrierten Intervallen, aus denen Sie wählen können:

  • jede Minute / alle fünf Minuten
  • stündlich / täglich / wöchentlich / vierteljährlich / jährlich
  • zu einer bestimmten Tageszeit
  • und viele mehr

In der Tat würde ich sagen, dass es einen vollständigen Satz von Routinen bietet, so dass Sie niemals die Shell berühren müssen, um Ihre benutzerdefinierten Cron-Jobs zu erstellen!

Ja, ich kann Ihnen sagen, dass Sie gerne wissen möchten, wie Sie Ihre benutzerdefinierten geplanten Aufgaben implementieren. Dies habe ich auch zu Beginn des Artikels versprochen.

Erstellen Sie Ihre erste geplante Aufgabe in Laravel

Wie bereits erwähnt, gibt es auf Laravel verschiedene Möglichkeiten, geplante Aufgaben zu definieren. Lassen Sie uns durchgehen, um zu verstehen, wie es funktioniert.

Die Schließungs- / Callable-Methode

Die Scheduling-API bietet die Anruf Methode, mit der Sie eine aufrufbare Funktion oder eine Abschlussfunktion ausführen können. Lassen Sie uns das überarbeiten app / Console / Kernel.php Datei mit dem folgenden Code.

call (function () $ posts = DB :: table ('posts') -> select ('user_id', DB :: raw ('count (*) als total_posts')) -> groupBy ('user_id') - > get (); foreach ($ posts as $ post) DB :: table ('users_statistics') -> wo ('user_id', $ post-> user_id) -> update (['total_posts' => $ post- > total_posts]);) -> everyThirtyMinutes (); 

Wie Sie sehen, haben wir die Schließungsfunktion als erstes Argument von übergeben Anruf Methode. Außerdem haben wir die Häufigkeit auf alle 30 Minuten festgelegt, sodass die Schließfunktion alle 30 Minuten ausgeführt wird!

In unserem Beispiel zählen wir die Gesamtzahl der Beiträge pro Benutzer und aktualisieren die Statistiktabelle entsprechend.

Der handwerkliche Befehl

Neben den Schließungen oder Callables können Sie auch einen handwerklichen Befehl einplanen, der in bestimmten Intervallen ausgeführt wird. In der Tat sollte dies der bevorzugte Ansatz gegenüber Schließungen sein, da er gleichzeitig eine bessere Code-Organisation und Wiederverwendbarkeit bietet.

Gehen Sie weiter und überarbeiten Sie den Inhalt der app / Console / Kernel.php Datei mit der folgenden.

Befehl ('statistics: user') -> everyThirtyMinutes ();  / ** * Registrieren Sie die auf Closure basierenden Befehle für die Anwendung. * * @return void * / protected Funktionsbefehle () erfordern Basispfad ('routes / console.php'); 

Es ist das Befehl Methode, die Sie verwenden möchten, wenn Sie einen handwerklichen Befehl planen möchten, wie im obigen Code-Snippet gezeigt. Sie müssen die handwerkliche Befehlssignatur als erstes Argument von übergeben Befehl Methode.

Natürlich müssen Sie auch den entsprechenden Handwerkerbefehl unter definieren app / Konsole / Befehle / UserStatistics.php.

select ('user_id', DB :: raw ('count (*) as total_posts')) -> groupBy ('user_id') -> get (); // Statistiktabelle für foreach aktualisieren ($ posts as $ post) DB :: table ('users_statistics') -> wo ('user_id', $ post-> user_id) -> update (['total_posts' => $ post- > total_posts]); 

Der Exec-Befehl

Wir könnten sagen, dass die bisher besprochenen Methoden spezifisch für die Laravel-Anwendung selbst waren. Darüber hinaus können Sie mit Laravel die Shell-Befehle so planen, dass Sie auch externe Anwendungen ausführen können.

Gehen wir ein kurzes Beispiel durch, das zeigt, wie Sie täglich ein Backup Ihrer Datenbank erstellen.

exec ("mysqldump -h $ host -u $ username -p $ password $ database") -> daily () -> sendOutputTo ('/ backups / daily_backup.sql'); 

Aus dem Code ist ersichtlich, dass Sie die verwenden müssen exec Methode des Schedulers, und Sie müssen den Befehl, den Sie ausführen möchten, als erstes Argument übergeben.

Abgesehen davon haben wir auch die verwendet sendOutputTo Methode, mit der Sie die Ausgabe des Befehls sammeln können. Auf der anderen Seite gibt es eine Methode, emailOutputTo, So können Sie den Ausgabeinhalt per E-Mail versenden!

Und das bringt uns zum Ende des Artikels. Tatsächlich haben wir die Oberfläche der Laravel Scheduling API gerade verkratzt und sie hat viel zu bieten.

Fazit

Heute haben wir die Taskplanungs-API im Laravel Web Framework durchgearbeitet. Es war faszinierend zu sehen, wie einfach es ist, Aufgaben zu erledigen, die regelmäßig ausgeführt werden müssen.

Am Anfang des Artikels haben wir die traditionelle Art und Weise des Einrichtens geplanter Aufgaben besprochen und anschließend die Vorgehensweise von Laravel eingeführt. In der zweiten Hälfte des Artikels haben wir einige praktische Beispiele zur Veranschaulichung von Task Scheduling-Konzepten durchlaufen.

Ich hoffe, dass Ihnen der Artikel gefallen hat, und Sie sollten sich sicherer fühlen, geplante Aufgaben in Laravel einzurichten. Für diejenigen unter Ihnen, die entweder gerade mit Laravel beginnen oder Ihr Wissen, Ihre Site oder Anwendung mit Erweiterungen erweitern möchten, haben wir eine Vielzahl von Möglichkeiten, die Sie in Envato Market lernen können.

Sollte Ihnen etwas in den Sinn kommen, beginnen wir ein Gespräch mit dem untenstehenden Feed!