Ce package surveillera votre emploi du temps Laravel. Il écrira une entrée dans une table de journal de la base de données chaque fois qu'une tâche planifiée démarre, se termine, échoue ou est ignorée. À l'aide de la commande list
, vous pouvez vérifier quand les tâches planifiées ont été exécutées.
Ce forfait peut également synchroniser votre emploi du temps avec Oh Dear. Oh Dear vous enverra une notification chaque fois qu'une tâche planifiée ne s'exécute pas à temps ou échoue.
Nous investissons beaucoup de ressources dans la création des meilleurs packages open source de leur catégorie. Vous pouvez nous soutenir en achetant l'un de nos produits payants.
Nous apprécions grandement que vous nous envoyiez une carte postale de votre ville natale, mentionnant le(s) forfait(s) que vous utilisez. Vous trouverez notre adresse sur notre page contact. Nous publions toutes les cartes postales reçues sur notre mur virtuel de cartes postales.
Vous pouvez installer le package via composer :
composer require spatie/laravel-schedule-monitor
Si vous avez besoin de la prise en charge de Laravel 8, vous pouvez installer la v2 du package à l'aide composer require spatie/laravel-schedule-monitor:^2
.
Vous devez publier et exécuter des migrations :
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-migrations "
php artisan migrate
Vous pouvez publier le fichier de configuration avec :
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-config "
Voici le contenu du fichier de configuration publié :
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 ,
],
];
Le moniteur de planification enregistrera chaque démarrage, fin et échec de toutes les tâches planifiées. Après un certain temps, les monitored_scheduled_task_log_items
peuvent devenir volumineux.
Utilisez la fonction d'élagage de modèle de Laravel, vous pouvez supprimer les anciens modèles MonitoredScheduledTaskLogItem
. Les modèles plus anciens que le nombre de jours configuré dans delete_log_items_older_than_days
dans le fichier de configuration schedule-monitor
seront supprimés.
// 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 ();
}
}
Chaque fois que vous déployez votre application, vous devez exécuter la commande schedule-monitor:sync
php artisan schedule-monitor:sync
Cette commande est responsable de la synchronisation de votre emploi du temps avec la base de données, et éventuellement Oh Dear. Nous vous recommandons fortement d'ajouter cette commande au script qui déploie votre environnement de production.
Dans un environnement hors production, vous devez exécuter manuellement schedule-monitor:sync
. Vous pouvez vérifier si tout a été correctement synchronisé à l'aide schedule-monitor:list
.
Remarque : L'exécution de la commande sync supprimera tous les autres moniteurs cron que vous avez définis autres que la planification de l'application.
Si vous souhaitez utiliser des synchronisations non destructives avec Oh Dear afin de pouvoir surveiller d'autres tâches cron en dehors de Laravel, vous pouvez utiliser l'indicateur --keep-old
. Cela ne fera que transférer de nouvelles tâches vers Oh Dear, plutôt qu'une synchronisation complète. Notez que cela ne supprimera aucune tâche d’Oh Dear qui ne figure plus dans votre emploi du temps.
Pour surveiller votre planning, vous devez d'abord exécuter schedule-monitor:sync
. Cette commande examinera votre planning et créera une entrée pour chaque tâche dans la table monitored_scheduled_tasks
.
Pour afficher toutes les tâches planifiées surveillées, vous pouvez exécuter schedule-monitor:list
. Cette commande listera toutes les tâches planifiées surveillées. Il vous montrera quand une tâche planifiée a démarré, terminée ou échoué pour la dernière fois.
Le package écrira une entrée dans la table monitored_scheduled_task_log_items
dans la base de données chaque fois qu'une tâche planifiée démarre, se termine, échoue ou est ignorée. Jetez un œil au contenu de ce tableau si vous souhaitez savoir quand et comment les tâches planifiées se sont exécutées. Les éléments du journal contiennent également d'autres mesures intéressantes telles que l'utilisation de la mémoire, le temps d'exécution, etc.
Le moniteur de planification tentera de déterminer automatiquement un nom pour une tâche planifiée. Pour les commandes, il s'agit du nom de la commande, pour les tâches anonymes, le nom de classe du premier argument sera utilisé. Pour certaines tâches, comme les fermetures programmées, un nom ne peut pas être déterminé automatiquement.
Pour définir manuellement un nom pour la tâche planifiée, vous pouvez cliquer sur monitorName()
.
Voici un exemple.
// 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 ' );
}
Lorsque vous modifiez le nom de la tâche, le moniteur de planification supprime tous les éléments de journal du moniteur portant l'ancien nom et crée un nouveau moniteur utilisant le nouveau nom de la tâche.
Lorsque le package détecte que la dernière exécution d'une tâche planifiée ne s'est pas exécutée à temps, la liste schedule-monitor
affiche cette tâche en utilisant une couleur d'arrière-plan rouge. Dans cette capture d'écran, la tâche nommée your-command
s'est exécutée trop tard.
Le package déterminera qu'une tâche s'est exécutée trop tard si elle n'était pas terminée au moment où elle était censée s'exécuter + le délai de grâce. Vous pouvez considérer le délai de grâce comme le nombre de minutes dont une tâche a besoin pour se terminer dans des circonstances normales. Par défaut, le package accorde un délai de grâce de 5 minutes à chaque tâche.
Vous pouvez personnaliser le délai de grâce en utilisant la méthode graceTimeInMinutes
sur une tâche. Dans cet exemple, un délai de grâce de 10 minutes est utilisé pour la tâche your-command
.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Vous pouvez éviter qu'une tâche planifiée soit surveillée en cliquant sur doNotMonitor
lors de la planification de la tâche.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitor ();
}
Vous pouvez stocker la sortie en cliquant sur storeOutputInDb
lors de la planification de la tâche.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> storeOutputInDb ();
}
La sortie sera stockée dans la table monitored_scheduled_task_log_items
, dans la clé output
de la meta
colonne.
Si vous utilisez spatie/laravel-multitenancy, vous devez ajouter le PingOhDearJob
au tableau not_tenant_aware_jobs
dans config/multitenancy.php
.
' not_tenant_aware_jobs ' => [
// ...
Spatie ScheduleMonitor Jobs PingOhDearJob::class,
]
Sans cela, le PingOhDearJob
échouera car aucun locataire ne sera défini.
Ce package peut synchroniser votre emploi du temps avec la vérification cron Oh Dear. Oh Dear vous enverra une notification chaque fois qu'une tâche planifiée ne se termine pas à temps.
Pour commencer, vous devrez d’abord installer le SDK Oh Dear.
composer require ohdearapp/ohdear-php-sdk
Ensuite, vous devez vous assurer que les clés api_token
et site_id
du schedule-monitor
sont remplies avec un jeton API et un identifiant de site Oh Dear. Pour vérifier que ces valeurs contiennent des valeurs correctes, vous pouvez exécuter cette commande.
php artisan schedule-monitor:verify
Pour synchroniser votre emploi du temps avec Oh Dear, exécutez cette commande :
php artisan schedule-monitor:sync
Après cela, la commande list
devrait montrer que toutes les tâches planifiées dans votre application sont enregistrées sur Oh Dear.
Pour que les tâches planifiées soient aussi courtes que possible, Oh Dear sera pingé via les tâches en file d'attente. Pour garantir une livraison rapide à Oh Dear et éviter les fausses notifications positives, nous vous recommandons fortement de créer une file d'attente dédiée pour ces tâches. Vous pouvez mettre le nom de cette file d'attente dans la clé de file queue
du fichier de configuration.
Oh Dear attendra la fin d'une tâche planifiée pendant un nombre de minutes donné. C'est ce qu'on appelle le délai de grâce. Par défaut, toutes les tâches planifiées bénéficieront d'un délai de grâce de 5 minutes. Pour personnaliser cette valeur, vous pouvez ajouter graceTimeInMinutes
à vos tâches planifiées.
Voici un exemple où Oh Dear enverra une notification si la tâche n'est pas terminée à 00h10.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Si vous souhaitez qu'une tâche soit surveillée par le moniteur de planification, mais pas par Oh Dear, vous pouvez ajouter doMonitorAtOhDear
à vos tâches planifiées.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitorAtOhDear ();
}
Actuellement, ce package ne fonctionne pas pour les tâches qui utilisent ces méthodes :
between
unlessBetween
when
skip
Nous supposons que, lorsque vos tâches planifiées ne s'exécutent pas correctement, une tâche planifiée qui envoie des notifications ne s'exécutera probablement pas non plus. C'est pourquoi ce package n'envoie pas de notifications par lui-même.
Ces services peuvent vous avertir lorsque les tâches planifiées ne s'exécutent pas correctement :
composer test
Veuillez consulter CHANGELOG pour plus d'informations sur ce qui a changé récemment.
Veuillez consulter CONTRIBUER pour plus de détails.
Si vous avez trouvé un bug concernant la sécurité, veuillez envoyer un mail à [email protected] au lieu d'utiliser le suivi des problèmes.
La licence MIT (MIT). Veuillez consulter le fichier de licence pour plus d'informations.