Agendamento de tarefas em Laravel | Reviltec
Agendamento de tarefas em Laravel
Neste artigo, veremos um dos recursos interessantes da estrutura da Web Laravel – agendamento de tarefas. Ao longo deste artigo, veremos como o Laravel permite que você gerencie tarefas agendadas em seu aplicativo. Além disso, também acabaremos criando nossas próprias tarefas agendadas personalizadas para fins de demonstração.
A estrutura Laravel permite configurar tarefas agendadas para que você não precise se preocupar em configurá-las no nível do sistema. Você pode se livrar dessa sintaxe cron complexa enquanto configura tarefas agendadas, pois o Laravel permite que você as defina de maneira amigável.
Começaremos o artigo com como você está acostumado a configurar tarefas cron tradicionais e, em seguida, exploraremos a maneira Laravel de alcançá-lo. Na segunda metade do artigo, tentaremos criar algumas tarefas agendadas personalizadas que devem fornecer informações práticas sobre o assunto.
Configuração de Tarefa Agendada Tradicional
No desenvolvimento de aplicativos do dia-a-dia, muitas vezes você enfrenta uma situação que exige que você execute determinados scripts ou comandos periodicamente. Se você estiver trabalhando com o sistema *nix, provavelmente sabe que os cron jobs lidam com esses comandos. Por outro lado, elas são conhecidas como tarefas agendadas em sistemas baseados em Windows.
Vamos dar uma olhada rápida em um exemplo simples do cron job baseado em *nix.
Bastante simples – ele executa o statistics.sh arquivo a cada cinco minutos!
Embora esse tenha sido um caso de uso bastante simples, muitas vezes você se encontra em uma situação que exige a implementação de casos de uso mais complexos. Por outro lado, um sistema complexo requer que você defina vários cron jobs que são executados em diferentes intervalos de tempo.
Vamos ver algumas tarefas que um aplicativo Web complexo deve executar periodicamente no back-end.
Limpe os dados desnecessários do back-end do banco de dados.
Atualize os índices de cache de front-end para mantê-los atualizados.
Calcule as estatísticas do site.
Mande emails.
Faça backup de diferentes elementos do site.
Então, como você pode ver, há muitas coisas por aí esperando para serem executadas periodicamente e também em diferentes intervalos de tempo. Se você é um administrador de sistema experiente, é uma moleza para você definir os cron jobs para todas essas tarefas, mas às vezes nós, como desenvolvedores, desejamos que houvesse uma maneira mais fácil de contornar isso.
Felizmente, o Laravel vem com um built-in Agendamento de Tarefas API que permite definir tarefas agendadas como nunca antes. E sim, a próxima seção é sobre isso – o básico do agendamento de tarefas do Laravel.
O caminho do laravel
Na seção anterior, passamos pela maneira tradicional de configurar cron jobs. Nesta seção, veremos as especificidades do Laravel no contexto da API de Agendamento de Tarefas.
Antes de prosseguirmos, o importante a entender é que o recurso de agendamento fornecido pelo Laravel é como qualquer outro recurso e não será invocado automaticamente. Então, se você está pensando que não precisa fazer nada no nível do sistema, então você está sem sorte, eu diria.
Na verdade, a primeira coisa que você deve fazer caso deseje usar o sistema de agendamento Laravel é configurar o cron job que é executado a cada minuto e chama o comando artisan mostrado no trecho a seguir.
O comando artesão acima chama o agendador do Laravel e, por sua vez, executa todos os trabalhos cron pendentes definidos em seu aplicativo.
Claro, ainda estamos para ver como definir as tarefas agendadas em seu aplicativo Laravel, e essa é a próxima coisa que vamos mergulhar.
É o schedule método do AppConsoleKernel classe que você precisa usar caso deseje definir tarefas agendadas específicas do aplicativo.
Vá em frente e pegue o conteúdo do app/Console/Kernel.php Arquivo.
<p>Como você pode ver, o próprio código principal fornece um exemplo útil.  No exemplo acima, o Laravel executa o <code class="inline">inspire</code> comando do artesão de hora em hora.  Você não acha que a sintaxe é tão intuitiva em primeiro lugar?</p>
<p>Na verdade, existem algumas maneiras diferentes pelas quais o Laravel permite que você defina tarefas de agendamento:</p>
<li>Use o closure/callable.</li>
<li>Chame o comando artesão.</li>
<li>Execute o comando shell.</li>
<p>Além disso, há muitas frequências de agendamento integradas que você pode escolher:</p>
<li>cada minuto/cada cinco minutos</li>
<li>por hora/diário/semanal/trimestral/anual</li>
<li>em uma hora específica do dia</li>
<li>e muitos mais</li>
<p>Na verdade, eu diria que ele fornece um conjunto completo de rotinas para que você nunca precise tocar no shell para criar seus cron jobs personalizados!</p>
<p>Sim, posso dizer que você está ansioso para saber como implementar suas tarefas agendadas personalizadas, e foi isso que prometi também no início do artigo.</p>
<h2>Crie sua primeira tarefa agendada em Laravel</h2>
<p>Como discutimos, existem diferentes maneiras pelas quais o Laravel permite que você defina tarefas agendadas.  Vamos passar por cada um para entender como ele funciona.</p>
<h3>O método de encerramento/chamada</h3>
<p>A API de agendamento fornece a <code class="inline">call</code> método que permite executar uma função que pode ser chamada ou de fechamento.  Vamos revisar o <code class="inline">app/Console/Kernel.php</code> arquivo com o seguinte código.</p>
Como você pode ver, passamos a função closure como o primeiro argumento do call método. Além disso, definimos a frequência para a cada 30 minutos, então ele executará a função de fechamento a cada 30 minutos!
Em nosso exemplo, contamos o total de postagens por usuário e atualizamos a tabela de estatísticas de acordo.
O Comando Artesão
Além dos encerramentos ou callables, você também pode agendar um comando artesanal que será executado em determinados intervalos. Na verdade, essa deve ser a abordagem preferida em relação aos fechamentos, pois fornece melhor organização do código e reutilização ao mesmo tempo.
Vá em frente e revise o conteúdo do app/Console/Kernel.php arquivo com o seguinte.
<p>É o <code class="inline">command</code> método que você gostaria de usar caso deseje agendar um comando artesão conforme mostrado no trecho de código acima.  Você precisa passar a assinatura do comando artesão como o primeiro argumento do <code class="inline">command</code> método.</p>
<p>Claro, você precisa definir o comando de artesão correspondente também em <code class="inline">app/Console/Commands/UserStatistics.php</code>.</p>
<h3>O Comando Executivo</h3>
<p>Poderíamos dizer que os métodos que discutimos até agora eram específicos para o próprio aplicativo Laravel.  Além disso, o Laravel também permite agendar os comandos do shell para que você possa executar aplicativos externos também.</p>
<p>Vamos passar por um exemplo rápido que demonstra como fazer backup de seu banco de dados todos os dias.</p>
É evidente no código que você precisa usar o exec método do agendador, e você precisa passar o comando que você gostaria de executar como seu primeiro argumento.
Além disso, também usamos o sendOutputTo método que permite coletar a saída do comando. Por outro lado, há um método, emailOutputToque permite enviar por e-mail o conteúdo de saída!
E isso nos leva ao final do artigo. Na verdade, acabamos de arranhar a superfície da API Laravel Scheduling, e ela tem muito a oferecer em seu kitty.
Hoje, passamos pela API de agendamento de tarefas no framework web Laravel. Foi fascinante ver a facilidade com que ele permite gerenciar tarefas que precisam ser executadas periodicamente.
No início do artigo, discutimos a maneira tradicional de configurar tarefas agendadas e, em seguida, apresentamos a maneira Laravel de fazê-lo. Na segunda metade do artigo, passamos por alguns exemplos práticos para demonstrar os conceitos de agendamento de tarefas.
Espero que você tenha gostado do artigo e se sinta mais confiante em configurar tarefas agendadas no Laravel. Para aqueles que estão apenas começando com o Laravel ou procurando expandir seu conhecimento, site ou aplicativo com extensões, temos uma variedade de coisas que você pode estudar no Envato Market.