Este paquete controlará su programación de Laravel. Escribirá una entrada en una tabla de registro en la base de datos cada vez que una tarea programada comience, finalice, falle o se omita. Usando el comando list
puede verificar cuándo se han ejecutado las tareas programadas.
Este paquete también puede sincronizar tu agenda con Oh Dear. Oh Dear te enviará una notificación cada vez que una tarea programada no se ejecute a tiempo o falle.
Invertimos muchos recursos en la creación de los mejores paquetes de código abierto. Puedes apoyarnos comprando uno de nuestros productos pagos.
Agradecemos mucho que nos envíe una postal desde su ciudad natal, mencionando cuál de nuestros paquetes está utilizando. Encontrarás nuestra dirección en nuestra página de contacto. Publicamos todas las postales recibidas en nuestro muro virtual de postales.
Puede instalar el paquete a través del compositor:
composer require spatie/laravel-schedule-monitor
Si necesita compatibilidad con Laravel 8, puede instalar la versión 2 del paquete usando composer require spatie/laravel-schedule-monitor:^2
.
Debes publicar y ejecutar migraciones:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-migrations "
php artisan migrate
Puede publicar el archivo de configuración con:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-config "
Este es el contenido del archivo de configuración 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 ,
],
];
El monitor de programación registrará cada inicio, finalización y falla de todos los trabajos programados. Después de un tiempo, los monitored_scheduled_task_log_items
pueden volverse grandes.
Utilice la función de poda de modelos de Laravel para eliminar modelos antiguos MonitoredScheduledTaskLogItem
. Se eliminarán los modelos con una antigüedad superior a la cantidad de días configurada en delete_log_items_older_than_days
en el archivo de configuración schedule-monitor
.
// 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 implementes tu aplicación, debes ejecutar el comando schedule-monitor:sync
php artisan schedule-monitor:sync
Este comando es responsable de sincronizar su programación con la base de datos y, opcionalmente, Oh Dear. Recomendamos encarecidamente agregar este comando al script que implementa su entorno de producción.
En un entorno que no sea de producción, debe ejecutar manualmente schedule-monitor:sync
. Puede verificar si todo se sincronizó correctamente usando schedule-monitor:list
.
Nota: Al ejecutar el comando de sincronización se eliminarán todos los demás monitores cron que haya definido además de la programación de la aplicación.
Si desea utilizar sincronizaciones no destructivas con Oh Dear para poder monitorear otras tareas cron fuera de Laravel, puede usar la opción --keep-old
. Esto solo enviará nuevas tareas a Oh Dear, en lugar de una sincronización completa. Tenga en cuenta que esto no eliminará ninguna tarea de Oh Dear que ya no esté en su agenda.
Para monitorear su programación, primero debe ejecutar schedule-monitor:sync
. Este comando analizará su programación y creará una entrada para cada tarea en la tabla monitored_scheduled_tasks
.
Para ver todas las tareas programadas monitoreadas, puede ejecutar schedule-monitor:list
. Este comando enumerará todas las tareas programadas monitoreadas. Le mostrará cuándo comenzó, finalizó o falló por última vez una tarea programada.
El paquete escribirá una entrada en la tabla monitored_scheduled_task_log_items
en la base de datos cada vez que una tarea programada comience, finalice, falle o se omita. Eche un vistazo al contenido de esa tabla si desea saber cuándo y cómo se ejecutaron las tareas programadas. Los elementos del registro también contienen otras métricas interesantes como el uso de memoria, el tiempo de ejecución y más.
El monitor de programación intentará determinar automáticamente un nombre para una tarea programada. Para los comandos, este es el nombre del comando; para trabajos anónimos, se utilizará el nombre de clase del primer argumento. Para algunas tareas, como los cierres programados, no se puede determinar un nombre automáticamente.
Para establecer manualmente un nombre de la tarea programada, puede agregar monitorName()
.
He aquí un ejemplo.
// 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 ' );
}
Cuando cambia el nombre de la tarea, el monitor de programación eliminará todos los elementos de registro del monitor con el nombre anterior y creará un nuevo monitor con el nuevo nombre de la tarea.
Cuando el paquete detecta que la última ejecución de una tarea programada no se ejecutó a tiempo, la lista schedule-monitor
mostrará esa tarea con un color de fondo rojo. En esta captura de pantalla, la tarea denominada your-command
se ejecutó demasiado tarde.
El paquete determinará que una tarea se ejecutó demasiado tarde si no finalizó en el momento en que debía ejecutarse + el tiempo de gracia. Puede pensar en el tiempo de gracia como la cantidad de minutos que una tarea en circunstancias normales necesita para finalizar. De forma predeterminada, el paquete otorga un tiempo de gracia de 5 minutos a cada tarea.
Puede personalizar el tiempo de gracia utilizando el método graceTimeInMinutes
en una tarea. En este ejemplo se utiliza un tiempo de gracia de 10 minutos para la tarea your-command
.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Puede evitar que una tarea programada sea monitoreada agregando doNotMonitor
al programar la tarea.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitor ();
}
Puede almacenar el resultado añadiendo storeOutputInDb
al programar la tarea.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> storeOutputInDb ();
}
La salida se almacenará en la tabla monitored_scheduled_task_log_items
, en la clave output
de la meta
.
Si está utilizando spatie/laravel-multitenancy, debe agregar PingOhDearJob
a la matriz not_tenant_aware_jobs
en config/multitenancy.php
.
' not_tenant_aware_jobs ' => [
// ...
Spatie ScheduleMonitor Jobs PingOhDearJob::class,
]
Sin él, PingOhDearJob
fallará ya que no se establecerá ningún inquilino.
Este paquete puede sincronizar su agenda con la verificación cron Oh Dear. Oh Dear te enviará una notificación cada vez que una tarea programada no finalice a tiempo.
Para comenzar, primero deberá instalar Oh Dear SDK.
composer require ohdearapp/ohdear-php-sdk
A continuación, debe asegurarse de que las claves api_token
y site_id
del schedule-monitor
estén completas con un token API y una identificación de sitio Oh Dear. Para verificar que estos valores contienen los valores correctos, puede ejecutar este comando.
php artisan schedule-monitor:verify
Para sincronizar su agenda con Oh Dear, ejecute este comando:
php artisan schedule-monitor:sync
Después de eso, el comando list
debería mostrar que todas las tareas programadas en su aplicación están registradas en Oh Dear.
Para mantener los trabajos programados lo más breves posible, se hará ping a Oh Dear a través de los trabajos en cola. Para garantizar una entrega rápida a Oh Dear y evitar notificaciones de falsos positivos, recomendamos encarecidamente crear una cola dedicada para estos trabajos. Puede poner el nombre de esa cola en la clave queue
del archivo de configuración.
Oh Dear esperará a que se completen las tareas programadas durante una cantidad determinada de minutos. Esto se llama tiempo de gracia. De forma predeterminada, todas las tareas programadas tendrán un tiempo de gracia de 5 minutos. Para personalizar este valor, puede agregar graceTimeInMinutes
a sus tareas programadas.
Aquí hay un ejemplo en el que Oh Dear enviará una notificación si la tarea no finalizó a las 00:10.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Si desea que una tarea sea supervisada por el monitor de programación, pero no por Oh Dear, puede agregar doMonitorAtOhDear
a sus tareas programadas.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitorAtOhDear ();
}
Actualmente, este paquete no funciona para tareas que utilizan estos métodos:
between
unlessBetween
when
skip
Suponemos que, cuando las tareas programadas no se ejecutan correctamente, una tarea programada que envía notificaciones probablemente tampoco se ejecutará. Es por eso que este paquete no envía notificaciones por sí solo.
Estos servicios pueden notificarle cuando las tareas programadas no se ejecutan correctamente:
composer test
Consulte CHANGELOG para obtener más información sobre los cambios recientes.
Consulte CONTRIBUCIÓN para obtener más detalles.
Si encuentra un error relacionado con la seguridad, envíe un correo electrónico a [email protected] en lugar de utilizar el rastreador de problemas.
La Licencia MIT (MIT). Consulte el archivo de licencia para obtener más información.