Planification des tâches à Laravel

Dans cet article, nous allons passer en revue l'une des fonctionnalités les plus intéressantes de la planification des tâches de l'infrastructure Web Laravel. Tout au long de cet article, nous verrons comment Laravel vous permet de gérer des tâches planifiées dans votre application. De plus, nous créerons nos propres tâches planifiées personnalisées à des fins de démonstration..

Le framework Laravel vous permet de configurer des tâches planifiées de sorte que vous n’ayez pas à vous soucier de les configurer au niveau du système. Vous pouvez vous débarrasser de cette syntaxe complexe de cron lors de la configuration de tâches planifiées, car Laravel vous permet de les définir de manière conviviale..

Nous commencerons l’article par votre habitude de configurer des tâches cron traditionnelles, puis nous explorerons la méthode de Laravel pour y parvenir. Dans la seconde moitié de l'article, nous allons essayer en créant quelques tâches planifiées personnalisées qui devraient fournir un aperçu pratique du sujet..

Configuration traditionnelle des tâches planifiées

Dans le développement quotidien de vos applications, vous êtes souvent confronté à une situation qui vous oblige à exécuter certains scripts ou commandes périodiquement. Si vous travaillez avec le système * nix, vous savez probablement que les tâches cron gèrent ces commandes. D'autre part, ils sont appelés tâches planifiées sur des systèmes Windows.

Regardons rapidement un exemple simple du travail cron basé sur * nix.

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

Assez simple, il court le statistiques.sh déposer toutes les cinq minutes!

Bien que ce soit un cas d'utilisation assez simple, vous vous retrouvez souvent dans une situation qui vous oblige à implémenter des cas d'utilisation plus complexes. D'autre part, un système complexe nécessite que vous définissiez plusieurs tâches cron qui s'exécutent à des intervalles de temps différents..

Voyons quelques tâches qu'une application Web complexe doit effectuer périodiquement dans le back-end..

  • Nettoyer les données inutiles du back-end de la base de données.
  • Mettre à jour les index de mise en cache frontaux pour les maintenir à jour.
  • Calculer les statistiques du site.
  • Envoyer des emails.
  • Sauvegarder différents éléments de site.
  • Générer des rapports.
  • Et plus.

Ainsi, comme vous pouvez le constater, de nombreuses activités attendent d’être exécutées périodiquement et à des intervalles différents. Si vous êtes un administrateur système chevronné, c’est un gâteau pour vous de définir les tâches cron pour toutes ces tâches, mais nous, les développeurs, souhaitons parfois qu’il soit plus facile de contourner le problème..

Heureusement, Laravel est livré avec un Planification des tâches API qui vous permet de définir des tâches planifiées comme jamais auparavant. Et oui, la section suivante traite de cela: les bases de la planification des tâches de Laravel.

La voie de Laravel

Dans la section précédente, nous avons utilisé la méthode traditionnelle de création de tâches cron. Dans cette section, nous allons passer en revue les spécificités de Laravel dans le contexte de l'API de planification des tâches..

Avant de poursuivre, il est important de comprendre que la fonctionnalité de planification fournie par Laravel est comme toute autre fonctionnalité et ne sera pas invoquée automatiquement. Donc, si vous pensez que vous n'avez rien à faire au niveau du système, alors vous n'avez pas de chance, je dirais.

En fait, si vous souhaitez utiliser le système de planification Laravel, la première chose à faire est de configurer le travail cron qui s'exécute toutes les minutes et appelle la commande artisan présentée dans l'extrait suivant..

* * * * * calendrier php / chemin d'accès à votre projet / artisan: lancer >> / dev / null 2> & 1

La commande artisan ci-dessus appelle le planificateur Laravel, qui exécute à son tour toutes les tâches cron en attente définies dans votre application..

Bien sûr, nous n’avons pas encore appris comment définir les tâches planifiées dans votre application Laravel, et c’est la toute prochaine chose que nous allons explorer..

C'est le programme méthode du App \ Console \ Kernel classe que vous devez utiliser si vous souhaitez définir des tâches planifiées spécifiques à l'application.

Allez-y et prenez le contenu de la app / Console / Kernel.php fichier.

commande ('inspire') -> horaire (); 

Comme vous pouvez le constater, le code principal lui-même fournit un exemple utile. Dans l'exemple ci-dessus, Laravel exécute le inspirer commande artisanale toutes les heures. Ne pensez-vous pas que la syntaxe est si intuitive en premier lieu?

En fait, Laravel vous permet de définir des tâches de planification:

  • Utilisez la fermeture / appelable.
  • Appelez la commande artisan.
  • Exécuter la commande shell.

De plus, vous pouvez choisir parmi de nombreuses fréquences de planification intégrées:

  • toutes les minutes / toutes les cinq minutes
  • horaire / quotidien / hebdomadaire / trimestriel / annuel
  • à une heure précise de la journée
  • et beaucoup plus

En fait, je dirais qu'il fournit un ensemble complet de routines pour que vous n'ayez jamais besoin de toucher le shell pour créer vos tâches cron personnalisées.!

Oui, je peux dire que vous êtes impatient de savoir comment mettre en œuvre vos tâches planifiées personnalisées, et c'est ce que j'avais également promis au début de l'article..

Créez votre première tâche planifiée à Laravel

Comme nous en avons discuté, Laravel vous permet de définir des tâches planifiées de différentes manières. Passons en revue chacun pour comprendre son fonctionnement.

La méthode de fermeture / appelable

L’API de planification fournit la appel méthode qui vous permet d’exécuter une fonction appelable ou une fonction de fermeture. Révisons le app / Console / Kernel.php fichier avec le code suivant.

call (function () $ posts = DB :: table ('posts') -> select ('utilisateur_id', DB :: raw ('nombre (*) as total_posts')) -> groupBy ('utilisateur_id') - > get (); foreach ($ posts comme $ post) DB :: table ('users_statistics') -> où ('user_id', $ post-> user_id) -> update (['total_posts' => $ post- > total_posts]);) -> everyThirtyMinutes (); 

Comme vous pouvez le voir, nous avons adopté la fonction de fermeture comme premier argument de la appel méthode. En outre, nous avons défini la fréquence toutes les 30 minutes, afin d'exécuter la fonction de fermeture toutes les 30 minutes.!

Dans notre exemple, nous comptons le nombre total de messages par utilisateur et mettons à jour le tableau des statistiques en conséquence..

La commande artisanale

En plus des fermetures ou des callables, vous pouvez également programmer une commande artisanale qui sera exécutée à certains intervalles. En fait, cette approche devrait être privilégiée par rapport aux fermetures, car elle permet à la fois une meilleure organisation du code et une meilleure réutilisabilité..

Allez-y et révisez le contenu de la app / Console / Kernel.php déposer avec ce qui suit.

commande ('statistics: utilisateur') -> everyThirtyMinutes ();  / ** * Enregistrez les commandes basées sur la fermeture pour l'application. * * @return void * / protected function orders () require base_path ('routes / console.php'); 

C'est le commander La méthode que vous souhaitez utiliser si vous souhaitez planifier une commande artisanale, comme indiqué dans l'extrait de code ci-dessus. Vous devez passer la signature de commande artisanale comme premier argument de commander méthode.

Bien sûr, vous devez également définir la commande artisan correspondante à app / Console / Commands / UserStatistics.php.

select ('user_id', DB :: raw ('count (*) as total_posts')) -> groupBy ('user_id') -> get (); // met à jour la table de statistiques foreach ($ posts en tant que $ post) DB :: table ('users_statistics') -> où ('user_id', $ post-> user_id) -> update (['total_posts' => $ post- > total_posts]); 

La commande exécutive

Nous pourrions dire que les méthodes dont nous avons discuté jusqu'ici étaient spécifiques à l'application Laravel elle-même. De plus, Laravel vous permet également de planifier les commandes du shell pour pouvoir également exécuter des applications externes..

Examinons rapidement un exemple qui montre comment effectuer quotidiennement une sauvegarde de votre base de données..

exec ("mysqldump -h $ hôte -u $ nomutilisateur -p $ mot de passe $ base de données") -> daily () -> sendOutputTo ('/ backups / daily_backup.sql'); 

Il est évident d'après le code que vous devez utiliser le exec méthode du planificateur, et vous devez passer la commande que vous souhaitez exécuter comme premier argument.

En dehors de cela, nous avons également utilisé le sendOutputTo méthode qui vous permet de collecter le résultat de la commande. D'autre part, il y a une méthode, emailOutputTo, qui vous permet d'envoyer par courrier électronique le contenu de la sortie!

Et cela nous amène à la fin de l'article. En fait, nous venons de gratter la surface de l’API de planification de Laravel, qui a beaucoup à offrir dans son chaton..

Conclusion

Aujourd'hui, nous avons examiné l'API de planification des tâches du framework Web Laravel. C'était fascinant de voir avec quelle facilité cela vous permet de gérer des tâches qui doivent être exécutées périodiquement.

Au début de l'article, nous avons discuté de la manière traditionnelle de configurer des tâches planifiées, puis nous avons présenté la méthode de Laravel. Dans la seconde moitié de l'article, nous avons présenté quelques exemples pratiques illustrant les concepts de planification des tâches..

J'espère que vous avez apprécié l'article et que vous devriez être plus confiant quant à la configuration des tâches planifiées à Laravel. Pour ceux d'entre vous qui débutent avec Laravel ou qui souhaitent développer leurs connaissances, leur site ou leur application avec des extensions, nous pouvons étudier de nombreuses choses sur le marché Envato..

Si quelque chose vous venait à l'esprit, commençons une conversation en utilisant le flux ci-dessous.!