3

Gerenciando Tarefas Agendadas do Laravel no Banco de Dados

 2 years ago
source link: https://dev.to/pedropms/gerenciando-tarefas-agendadas-do-laravel-no-banco-de-dados-1l2n
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Gerenciando Tarefas Agendadas do Laravel no Banco de Dados

Jun 18

・3 min read

Tarefas agendadas são uma ótima maneira de executar processos repetitivos de maneira automatizada em nossos projetos, basta definir as tarefas e escolher os momentos em que elas serão executadas e pronto, pode deixar o resto do trabalho com o cron do servidor.

Geralmente essa definição dos momentos em que as tarefas irão rodar fica dentro do projeto e acaba sendo suficiente em muitos casos, porém, essa maneira de gerenciamento acaba sendo um empecílio quando se precisa alterar o horário em que as tarefas serão executadas. Gerenciando dessa maneira, será necessário uma alteração no arquivo, e uma nova release do projeto para as alterações terem efeito. Isso também restringe que o ajuste no horário da tarefa seja feito somente por um desenvolvedor.

Para resolver esse problema, podemos gerenciar as tarefas agendadas no banco de dados, fazendo com que apenas a alteração de um registro já altere o funcionamento da tarefa.

No Laravel temos o pacote: Laravel Database Schedule, que permite o gerenciamento das tarefas no banco de dados e ainda fornece uma interface para que a alteração das tarefas possa ser feita de maneira mais simples e por alguém sem tanto conhecimento de programação.

Instalação

Para instalar a biblioteca vamos rodar:

composer require robersonfaria/laravel-database-schedule
Enter fullscreen modeExit fullscreen mode

Após a instalação precisamos rodar as migrations para criar as tabelas usadas pela biblioteca:

php artisan migrate
Enter fullscreen modeExit fullscreen mode

Por último, exportar o arquivo de configurações:

php artisan vendor:publish --provider="RobersonFaria\DatabaseSchedule\DatabaseSchedulingServiceProvider" --tag="config"
Enter fullscreen modeExit fullscreen mode

No arquivo de configurações vamos alterar o restricted_access para false para o teste.

OBS: essa configuração deixa o dashboard de tarefas agendadas público, para restringir o acesso somente à usuários autorizados deixe a propriedade como false e consulte a documentação para definir quem poderá acessar.

Criando a Tarefa Agendada

Para exemplo vamos criar uma tarefa rodando:

php artisan make:command NovoComando
Enter fullscreen modeExit fullscreen mode

E configuramos o comando dessa maneira:

protected $signature = 'comando:novo-comando';

protected $description = 'Novo comando teste';

public function handle(): int
{
    $this->info('Comando rodando!');
    return 0;
}
Enter fullscreen modeExit fullscreen mode

Normalmente, agora seria o momento em que iríamos cadastrar esse comando que criamos, no Kernel.php e configurariamos o horário para a tarefa rodar, mas usando o database schedule não faremos isso.

Agendando a Tarefa no Banco de Dados

Após iniciar o servidor com:

php artisan serve
Enter fullscreen modeExit fullscreen mode

Vamos acessar http://localhost:8000/schedule para entrar no dashboard.

No formulário, vamos escolher o comando que queremos agendar, a expressão cron que vai definir quando ocorrerá a execução e marcar a opção de envio de email caso ocorra uma falha na execução, para isso também vamos definir um email.

Para entender todas as opções e parâmetros que podem ser configurados na tarefa agendada visite a documentação.

Após essa configuração podemos ver no dashboard nosso comando cadastrado.

Executando as tarefas agendadas

Para testar localmente vamos rodar o comando:

php artisan schedule:run
Enter fullscreen modeExit fullscreen mode

E depois do comando rodar, se acessarmos o email cadastrado e a sessão de Histórico no dashboard veremos o resutado.

Caso ocorra algum erro, o email e histórico continuam sendo registrados.

Referências

https://github.com/robersonfaria/laravel-database-schedule


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK