Maison  >  Article  >  cadre php  >  Comment utiliser la planification des tâches dans l'application Laravel

Comment utiliser la planification des tâches dans l'application Laravel

PHPz
PHPzoriginal
2023-04-06 19:02:541523parcourir

Laravel est un framework PHP populaire qui fournit de nombreux composants et outils disponibles, notamment la planification des tâches. Dans cet article, nous verrons comment utiliser la planification des tâches dans les applications Laravel.

Qu'est-ce que la planification des tâches ?
La planification des tâches fait référence à la technologie permettant d'exécuter certaines tâches spécifiées conformément au plan. Par exemple, sauvegardez votre base de données toutes les heures ou envoyez des rapports tous les jours. Dans Laravel, la planification des tâches est similaire aux onglets Cron, mais plus facile à mettre en œuvre et à gérer.

Le planificateur de tâches de Laravel utilise les outils de ligne de commande Artisan pour gérer la planification, notamment les sockets CRON et Powershell.

Voyons comment implémenter la planification des tâches dans Laravel.

La première étape - Créer une tâche
La création d'une tâche est la première étape pour mettre en œuvre la planification des tâches. Les tâches de planification dans Laravel sont présentées sous forme de classes. La conversion des tâches en classes permet une meilleure gestion et des tests en définissant la logique à exécuter. Créons un exemple de tâche TutorialTask : TutorialTask

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class TutorialTask implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // Your logic to execute every minute.
        \Log::info(&#39;Task executed at &#39;.now());
    }
}

这个任务逻辑很简单,每分钟记录一条信息到日志中。现在,我们已经创建了一个任务,但它不会自动执行。我们需要为它设置调度。

第二步——在控制台中设置调度
Laravel提供了许多可以将任务添加到调度中的方法。在这里,我们使用schedule方法在控制台中设置调度。

$schedule->job(new TutorialTask)->everyMinute();

everyMinute方法表示这个任务每分钟都会执行。您可以使用其他预定义的方法,如每小时(hourly)、每天(daily)、每月(monthly)或每周(weekly)。

或者,您可以定义我们自己的频率规则:

$schedule->job(new TutorialTask)->everyFiveMinutes();

这个规则指定任务应该每五分钟运行一次。

第三步——启动任务调度器
现在我们已经为任务设置了调度,接下来我们需要启动任务调度器。我们可以在服务器上运行调度器,也可以使用Laravel自带的计划调度器,它是通过设置Cron Tab来运行的。

在控制台中运行以下命令:

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

这个命令将每分钟运行一次Laravel的调度器。您需要将/path-to-your-project替换为您的Laravel应用程序的路径。>> /dev/null指示将所有输出转发到/dev/null中。

最后一步——启动队列(如果需要)
如果您的应用程序使用队列,则需要启用队列调度器。Laravel使用Redis或Beanstalkd等后端驱动程序来处理队列任务。您需要按照以下步骤启用队列调度器:

.env文件中定义QUEUE_DRIVER

QUEUE_DRIVER=redis

config/queue.php中设置队列连接:

'default' => env('QUEUE_DRIVER', 'redis'),

'connections' => [
    .....
     'redis' => [
            'driver' => 'redis',
            'connection' => 'your-default-redis-connection',
            'queue' => env('REDIS_QUEUE', 'default'),
            'retry_after' => 90,
        ],
  .....
]

修改.env

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_QUEUE=default
La logique de cette tâche est très simple, enregistrant un message dans le journal toutes les minutes. Maintenant, nous avons créé une tâche, mais elle ne sera pas exécutée automatiquement. Nous devons établir un calendrier pour cela.

Étape 2 - Configurer le planning dans la console

Laravel propose de nombreuses méthodes pour ajouter des tâches au planning. Ici, nous utilisons la méthode schedule pour définir le planning dans la console. La méthode

php artisan queue:work redis --daemon

everyMinute signifie que cette tâche sera exécutée toutes les minutes. Vous pouvez utiliser d'autres méthodes prédéfinies telles que horaire (hourly), quotidienne (daily), mensuelle (monthly) ou hebdomadaire (weekly ).

Vous pouvez également définir notre propre règle de fréquence : 🎜rrreee🎜Cette règle précise que la tâche doit s'exécuter toutes les cinq minutes. 🎜🎜Étape 3 - Démarrez le planificateur de tâches🎜Maintenant que nous avons configuré le calendrier de la tâche, nous devons démarrer le planificateur de tâches. Nous pouvons exécuter le planificateur sur le serveur ou utiliser le propre planificateur de Laravel, qui est exécuté en configurant Cron Tab. 🎜🎜Exécutez la commande suivante dans la console : 🎜rrreee🎜Cette commande exécutera le planificateur de Laravel toutes les minutes. Vous devez remplacer /path-to-your-project par le chemin d'accès à votre application Laravel. >> /dev/null ordonne que toutes les sorties soient transmises à /dev/null. 🎜🎜Dernière étape : démarrer la file d'attente (si nécessaire) 🎜Si votre application utilise des files d'attente, vous devez activer le planificateur de file d'attente. Laravel utilise des pilotes backend comme Redis ou Beanstalkd pour gérer les tâches de file d'attente. Vous devez suivre ces étapes pour activer le planificateur de file d'attente : 🎜🎜 Définissez QUEUE_DRIVER dans le fichier .env : 🎜rrreee🎜Dans config/queue.php code> Définissez la connexion à la file d'attente dans : 🎜rrreee🎜Modifiez le fichier <code>.env pour spécifier la connexion à la file d'attente : 🎜rrreee🎜Démarrez maintenant le planificateur de file d'attente : 🎜rrreee🎜Cette commande démarrera le planificateur de file d'attente et démarrera exécuter des tâches. 🎜🎜Conclusion : 🎜La fonctionnalité de planification des tâches de Laravel vous permet d'exécuter des commandes, d'exécuter des programmes ou d'envoyer des e-mails à la demande. En créant des tâches planifiées et en les ajoutant à la liste des tâches, vous pouvez facilement gérer et exécuter des tâches. Au cours de ce processus, n'oubliez pas d'activer le planificateur ou le planificateur de files d'attente afin que les tâches s'exécutent aux heures planifiées ou dans une file d'attente prioritaire. Bonne chance pour utiliser le planificateur de tâches Laravel pour améliorer les performances et la réactivité de votre application. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn