Este pacote irá monitorar sua programação do Laravel. Ele gravará uma entrada em uma tabela de log no banco de dados sempre que uma tarefa agendada iniciar, terminar, falhar ou for ignorada. Usando o comando list
você pode verificar quando as tarefas agendadas foram executadas.
Este pacote também pode sincronizar sua programação com Oh Dear. Oh Dear enviará uma notificação sempre que uma tarefa agendada não for executada no prazo ou falhar.
Investimos muitos recursos na criação dos melhores pacotes de código aberto. Você pode nos apoiar comprando um de nossos produtos pagos.
Agradecemos muito que você nos envie um cartão postal de sua cidade natal, mencionando qual(is) de nossos pacotes você está usando. Você encontrará nosso endereço em nossa página de contato. Publicamos todos os cartões postais recebidos em nosso mural virtual de cartões postais.
Você pode instalar o pacote via compositor:
composer require spatie/laravel-schedule-monitor
Se precisar de suporte ao Laravel 8, você pode instalar a v2 do pacote usando composer require spatie/laravel-schedule-monitor:^2
.
Você deve publicar e executar migrações:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-migrations "
php artisan migrate
Você pode publicar o arquivo de configuração com:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-config "
Este é o conteúdo do arquivo de configuração publicado:
return [
/*
* The schedule monitor will log each start, finish and failure of all scheduled jobs.
* After a while the `monitored_scheduled_task_log_items` might become big.
* Here you can specify the amount of days log items should be kept.
*
* Use Laravel's pruning command to delete old `MonitoredScheduledTaskLogItem` models.
* More info: https://laravel.com/docs/9.x/eloquent#mass-assignment
*/
' delete_log_items_older_than_days ' => 30 ,
/*
* The date format used for all dates displayed on the output of commands
* provided by this package.
*/
' date_format ' => ' Y-m-d H:i:s ' ,
' models ' => [
/*
* The model you want to use as a MonitoredScheduledTask model needs to extend the
* `SpatieScheduleMonitorModelsMonitoredScheduledTask` Model.
*/
' monitored_scheduled_task ' => Spatie ScheduleMonitor Models MonitoredScheduledTask::class,
/*
* The model you want to use as a MonitoredScheduledTaskLogItem model needs to extend the
* `SpatieScheduleMonitorModelsMonitoredScheduledTaskLogItem` Model.
*/
' monitored_scheduled_log_item ' => Spatie ScheduleMonitor Models MonitoredScheduledTaskLogItem::class,
],
/*
* Oh Dear can notify you via Mail, Slack, SMS, web hooks, ... when a
* scheduled task does not run on time.
*
* More info: https://ohdear.app/cron-checks
*/
' oh_dear ' => [
/*
* You can generate an API token at the Oh Dear user settings screen
*
* https://ohdear.app/user/api-tokens
*/
' api_token ' => env ( ' OH_DEAR_API_TOKEN ' , '' ),
/*
* The id of the site you want to sync the schedule with.
*
* You'll find this id on the settings page of a site at Oh Dear.
*/
' site_id ' => env ( ' OH_DEAR_SITE_ID ' ),
/*
* To keep scheduled jobs as short as possible, Oh Dear will be pinged
* via a queued job. Here you can specify the name of the queue you wish to use.
*/
' queue ' => env ( ' OH_DEAR_QUEUE ' ),
/*
* `PingOhDearJob`s will automatically be skipped if they've been queued for
* longer than the time configured here.
*/
' retry_job_for_minutes ' => 10 ,
],
];
O monitor de agendamento registrará cada início, término e falha de todos os trabalhos agendados. Depois de um tempo, os monitored_scheduled_task_log_items
podem ficar grandes.
Use o recurso de remoção de modelo do Laravel, você pode excluir modelos MonitoredScheduledTaskLogItem
antigos. Modelos anteriores à quantidade de dias configurada em delete_log_items_older_than_days
no arquivo de configuração schedule-monitor
serão excluídos.
// app/Console/Kernel.php
use Spatie ScheduleMonitor Models MonitoredScheduledTaskLogItem ;
class Kernel extends ConsoleKernel
{
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' model:prune ' , [ ' --model ' => MonitoredScheduledTaskLogItem::class])-> daily ();
}
}
Cada vez que você implantar seu aplicativo, você deve executar o comando schedule-monitor:sync
php artisan schedule-monitor:sync
Este comando é responsável por sincronizar sua programação com o banco de dados e, opcionalmente, Oh Dear. É altamente recomendável adicionar esse comando ao script que implanta seu ambiente de produção.
Em um ambiente que não seja de produção, você deve executar manualmente schedule-monitor:sync
. Você pode verificar se tudo foi sincronizado corretamente usando schedule-monitor:list
.
Nota: A execução do comando sync removerá quaisquer outros monitores cron que você tenha definido além do agendamento do aplicativo.
Se você quiser usar sincronizações não destrutivas com Oh Dear para poder monitorar outras tarefas cron fora do Laravel, você pode usar o sinalizador --keep-old
. Isso apenas enviará novas tarefas para Oh Dear, em vez de uma sincronização completa. Observe que isso não removerá nenhuma tarefa do Oh Dear que não esteja mais em sua programação.
Para monitorar sua programação, você deve primeiro executar schedule-monitor:sync
. Este comando analisará sua programação e criará uma entrada para cada tarefa na tabela monitored_scheduled_tasks
.
Para visualizar todas as tarefas agendadas monitoradas, você pode executar schedule-monitor:list
. Este comando listará todas as tarefas agendadas monitoradas. Ele mostrará quando uma tarefa agendada foi iniciada, concluída ou falhou pela última vez.
O pacote gravará uma entrada na tabela monitored_scheduled_task_log_items
no banco de dados cada vez que uma tarefa agendada iniciar, terminar, falhar ou for ignorada. Dê uma olhada no conteúdo dessa tabela se quiser saber quando e como as tarefas agendadas foram executadas. Os itens de log também contêm outras métricas interessantes, como uso de memória, tempo de execução e muito mais.
O monitor de agendamento tentará determinar automaticamente um nome para uma tarefa agendada. Para comandos este é o nome do comando, para trabalhos anônimos será usado o nome da classe do primeiro argumento. Para algumas tarefas, como encerramentos programados, um nome não pode ser determinado automaticamente.
Para definir manualmente um nome para a tarefa agendada, você pode adicionar monitorName()
.
Aqui está um exemplo.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> monitorName ( ' a-custom-name ' );
$ schedule -> call ( fn () => 1 + 1 )-> hourly ()-> monitorName ( ' addition-closure ' );
}
Ao alterar o nome da tarefa, o monitor de agendamento removerá todos os itens de log do monitor com o nome antigo e criará um novo monitor usando o novo nome da tarefa.
Quando o pacote detecta que a última execução de uma tarefa agendada não foi executada a tempo, a lista schedule-monitor
exibirá essa tarefa usando uma cor de fundo vermelha. Nesta captura de tela, a tarefa chamada your-command
foi executada tarde demais.
O pacote determinará que uma tarefa foi executada tarde demais se não foi concluída no momento em que deveria ser executada + o tempo de carência. Você pode pensar no tempo de carência como o número de minutos que uma tarefa, em circunstâncias normais, precisa para ser concluída. Por padrão, o pacote concede um tempo de carência de 5 minutos para cada tarefa.
Você pode personalizar o tempo de carência usando o método graceTimeInMinutes
em uma tarefa. Neste exemplo, um tempo de carência de 10 minutos é usado para a tarefa your-command
.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Você pode evitar que uma tarefa agendada seja monitorada adicionando doNotMonitor
ao agendar a tarefa.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitor ();
}
Você pode armazenar a saída adicionando storeOutputInDb
ao agendar a tarefa.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> storeOutputInDb ();
}
A saída será armazenada na tabela monitored_scheduled_task_log_items
, na chave output
da meta
.
Se você estiver usando spatie/laravel-multitenancy você deve adicionar o PingOhDearJob
ao array not_tenant_aware_jobs
em config/multitenancy.php
.
' not_tenant_aware_jobs ' => [
// ...
Spatie ScheduleMonitor Jobs PingOhDearJob::class,
]
Sem ele, o PingOhDearJob
falhará, pois nenhum locatário será definido.
Este pacote pode sincronizar sua programação com a verificação Oh Dear cron. Oh Dear irá enviar-lhe uma notificação sempre que uma tarefa agendada não terminar a tempo.
Para começar, primeiro você precisa instalar o Oh Dear SDK.
composer require ohdearapp/ohdear-php-sdk
Em seguida, você precisa ter certeza de que as chaves api_token
e site_id
do schedule-monitor
estão preenchidas com um token de API e um ID de site Oh Dear. Para verificar se esses valores contêm valores corretos, você pode executar este comando.
php artisan schedule-monitor:verify
Para sincronizar sua programação com Oh Dear, execute este comando:
php artisan schedule-monitor:sync
Depois disso, o comando list
deverá mostrar que todas as tarefas agendadas em seu aplicativo estão cadastradas no Oh Dear.
Para manter os trabalhos agendados o mais curtos possível, Oh Dear receberá um ping por meio de trabalhos na fila. Para garantir uma entrega rápida para Oh Dear e evitar notificações de falsos positivos, é altamente recomendável criar uma fila dedicada para esses trabalhos. Você pode colocar o nome dessa fila na chave da queue
do arquivo de configuração.
Oh Dear aguardará a conclusão de uma tarefa agendada por um determinado período de minutos. Isso é chamado de tempo de graça. Por padrão, todas as tarefas agendadas terão um período de carência de 5 minutos. Para personalizar esse valor, você pode adicionar graceTimeInMinutes
às suas tarefas agendadas.
Aqui está um exemplo em que Oh Dear enviará uma notificação se a tarefa não for concluída até 00h10.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Se você deseja que uma tarefa seja monitorada pelo monitor de agendamento, mas não pelo Oh Dear, você pode adicionar doMonitorAtOhDear
às suas tarefas agendadas.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitorAtOhDear ();
}
Atualmente, este pacote não funciona para tarefas que usam estes métodos:
between
unlessBetween
when
skip
Presumimos que, quando suas tarefas agendadas não são executadas corretamente, uma tarefa agendada que envia notificações provavelmente também não será executada. É por isso que este pacote não envia notificações sozinho.
Estes serviços podem notificá-lo quando as tarefas agendadas não são executadas corretamente:
composer test
Consulte CHANGELOG para obter mais informações sobre o que mudou recentemente.
Consulte CONTRIBUINDO para obter detalhes.
Se você encontrou um bug relacionado à segurança, envie um email para [email protected] em vez de usar o rastreador de problemas.
A licença MIT (MIT). Consulte Arquivo de licença para obter mais informações.