9
respostas

SCHEDULE COMMAND

Bom dia senhores, fiz um comando simples no laravel, tudo configurado se eu chamar ele via cmd ele roda, imprime o que eu pedi e etc, porém quando eu rodo o php artisan schedule:run só funciona uma vez, por mais que o script esteja assim

 $schedule->command('TstCMD')->everyMinute();

Alguém sabe de algo ?

9 respostas

Oi Thiago, tudo bom?

Dando uma olhada na documentação do Scheduling parece que a ideia é gerar um unico lugar para manter todas as tarefas do seu sistema:

Laravel's command scheduler allows you to fluently and expressively define your command schedule within Laravel itself. When using the scheduler, only a single Cron entry is needed on your server. Your task schedule is defined in the app/Console/Kernel.php file's schedule method. To help you get started, a simple example is defined within the method.

Ele roda normal a primeira vez porque você rodou o comando. O que o laravel faz, aparentemente, é gerenciar a execução dos comandos para você. Ver qual precisa ser executado quando o cron bater.

Aqui tem um tutorial bem legal em relação a criação de crons =)

Na documentação do laravel eles indicam o laravel forge para o gerenciamento dessas tarefas também. Pode ser legal dar uma olhada.

Qualquer duvida é só falar.

Abraço e bons estudos!

Deu em nada, já olhei a documentação, e o tutorial, mas não vai não, mesma coisa.

Qual comando você está executando para gerar o cron?

php artisan schedule:run Segundo o laravel só precisa disso.

Então, na verdade o schedule é o comando que você vai adicionar no seu cron.

A ideia é que adicionando algo como:

// cron que executa o schedule de minuto em minuto
* * * * * php /seuProjeto/artisan schedule:run >> /dev/null 2>&1

Seu S.O. chamará o schedule:run a cada minuto. A partir disso o laravel gerencia quais comandos precisam ser executados ou não.

Por exemplo, se no seu schedule você tem 2 comandos, algo como:

//Roda uma vez por semana segunda feira as 13hrs
$schedule->call(function () {
    //
})->weekly()->mondays()->at('13:00');

// roda de hora em hora das 8 da manha as 5 da tarde em dias de semana
$schedule->command('seuComando')
          ->weekdays()
          ->hourly()
          ->timezone('America/Chicago')
          ->between('8:00', '17:00');

O que o schedule vai fazer é verificar se, quando o cron executar o comando schedule:run ele deve ou não executar esses comandos.

O Scheduler facilita a vida para não ter que criar varios crons (o que pode ser um trabalho meio chato). Ele não resolve a recorrencia no seu sistema operacional.

Qualquer problema é só falar.

Abraço.

php /seuProjeto/artisan schedule:run >> /dev/null 2>&1

Já tentei assim e não vai funciona

Estranho, verifica pra mim se você tem instalado algum gerenciador de tarefa no seu SO. No ubuntu você pode instalar rodando a linha de comando:

sudo apt-get install gnome-schedule

Tendo uma ferramenta de gerenciamento de tarefas instalada você precisa editar o arquivo que mapeia as tarefas. No caso do ubuntu você poderia executar o comando crontab -e.

Isso abrirá no seu terminal o arquivo que gerencia as tarefas do seu sistema operacional. Nesse arquivo você adiciona a linha:

* * * * * php /seuProjeto/artisan schedule:run >> /dev/null 2>&1

Os asteriscos representam, respectivamente: minutos (0-59), horas (0-23, 0 = meia noite), dia (1-31), mes (1-12), dia da semana (0-6, 0 = Domingo). Nosso comando * * * * * representa uma repetição de minuto em minuto. php /seuProjeto/artisan schedule:run é o comando que queremos que seja executado de minuto em minuto.

Com isso, o proprio laravel gerencia todas as tarefas referentes a sua aplicação. Se não fosse isso, a gente precisaria criar uma linha naquele arquivo para cada tarefa da aplicação. A ideia é justamente reduzir o problema com a gestão de tarefas e centralizar tudo no laravel.

Executar esse comando no terminal executará uma unica vez aquelas tarefas mesmo. Adicionando esse comando em um cron, tudo fica automatizado.

No windows o equivalente ao cron seria o schtasks.

Vou dar uma olhada depois, estou agora em período de prova. Um pouco de paciência volto, vlw ai.

Tranquilo =)

Qualquer coisa é só falar!

Abraço.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software