Usando Cron Schedule no Laravel para automatizar tarefas
O cron job é útil para automatizar nossa tarefa no horário especificado em intervalos regulares. O Laravel vem com um recurso para agendamento de tarefas que torna o agendamento do cron muito fácil. No passado, precisamos adicionar uma entrada separada para cada cron job. No Laravel, só precisamos adicionar um comando e ele executa todos os nossos cron jobs automaticamente. Não há necessidade de adicionar uma entrada separada para cada tarefa. Neste artigo, estudamos como usar o cron schedule no Laravel, o que nos ajuda a automatizar nossas tarefas.
Por que precisamos executar o Cron?
Existem vários exemplos que podemos citar onde precisamos executar um cron. Você pode administrar uma loja online e deseja enviar ofertas promocionais aos seus usuários. Ou você tem um site de associação e precisa enviar o e-mail de lembrete aos usuários sobre o período de renovação da assinatura. Estes são os dois exemplos em que podemos usar o cron. O que fazemos é escrever um programa que possa realizar essa tarefa e definir um cron para ele. Seu servidor irá procurar o tempo especificado para o cron e quando esse tempo chegar, ele executará o programa automaticamente. Não precisamos olhar para o relógio e executar o programa manualmente.
Este processo facilita nossa vida. Podemos nos concentrar em nossas outras coisas importantes e investir tempo em algo sábio.
Cron Schedule no Laravel
Para nosso artigo, vamos dar um exemplo do mundo real. Digamos que temos vários usuários em nosso banco de dados Laravel. A cada meia-noite, precisamos enviar um e-mail a todos os usuários descrevendo nossa nova oferta promocional. Fazendo isso, nossos usuários são notificados sobre novas ofertas e suas vendas podem receber mais atenção.
Presumimos que você armazenou todas as informações de seu usuário na tabela de ‘usuários’. Obteremos os e-mails dos usuários desta tabela e enviaremos um e-mail para eles. Claro, precisamos escrever um código de uma forma que deve ser executado a cada meia-noite.
Abra o app/Console/Kernel.php
arquivo em seu editor e adicione o modelo do usuário e a fachada do Mail ao arquivo.
<?php
namespace AppConsole;
use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;
use AppUser; // User model
use Mail; // Mail Facade
class Kernel extends ConsoleKernel
{
....
Kernal
classe tem um método schedule
onde temos que escrever um ou vários horários. Como precisamos enviar um e-mail para nossos usuários, escrevemos o código da seguinte maneira.
<?php
namespace AppConsole;
use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;
use AppUser;
use Mail;
class Kernel extends ConsoleKernel
{
....
/**
* Define the application's command schedule.
*
* @param IlluminateConsoleSchedulingSchedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->call(function() {
$arr_users = User::all();
if(count($arr_users) > 0) {
foreach ($arr_users as $user) {
$name = $user->name;
$email = $user->email;
$data = array("name" => $name, "body" => "This is our new promotional offer");
Mail::send('emails.mail', $data, function($message) use ($name, $email) {
$message->to($email, $name)
->subject('New Offer Launched');
$message->from('[email protected]', 'Artisans Web');
});
}
}
})->daily();
// tou can add more schedules here
}
....
No código acima, pegamos os usuários do banco de dados e enviamos um e-mail usando o método send da fachada do Mail. Aqui, precisamos criar mail.blade.php
arquivos no resources/views/emails
diretório.
mail.blade.php
Hi <strong>{{ $name }}</strong>,
<p>{{ $body }}</p>
Como nossa tarefa é enviar um e-mail à meia-noite utilizamos o daily()
método. O Laravel oferece diferentes opções de frequência de agendamento que você obteria na página de documentação.
Adicionar entrada Cron ao seu servidor
Finalmente, para definir este cron job em um servidor, você deve adicionar a entrada cron abaixo ao seu servidor.
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
Certifique-se de ter definido o caminho do seu projeto corretamente. Este Cron irá chamar o agendador de comandos do Laravel a cada minuto. Ele executa automaticamente o cronograma: execute o comando e avalie suas tarefas agendadas e execute as tarefas vencidas.
Esperamos que você tenha aprendido a usar a programação cron no Laravel e automatizar suas tarefas. Gostaríamos de ouvir sua opinião na seção de comentários abaixo.
Artigos relacionados
- Enviando e-mail via servidor SMTP do Gmail no Laravel
- Como usar eventos e ouvintes do Laravel em seu aplicativo
- Como usar o Laravel Passport para autenticação REST API