Dieses Paket überwacht Ihren Laravel-Zeitplan. Es schreibt jedes Mal einen Eintrag in eine Protokolltabelle in der Datenbank, wenn eine geplante Aufgabe beginnt, endet, fehlschlägt oder übersprungen wird. Mit dem Befehl list
können Sie überprüfen, wann die geplanten Aufgaben ausgeführt wurden.
Dieses Paket kann Ihren Zeitplan auch mit Oh Dear synchronisieren. Oh Dear sendet Ihnen eine Benachrichtigung, wenn eine geplante Aufgabe nicht rechtzeitig ausgeführt wird oder fehlschlägt.
Wir investieren viele Ressourcen in die Erstellung erstklassiger Open-Source-Pakete. Sie können uns unterstützen, indem Sie eines unserer kostenpflichtigen Produkte kaufen.
Wir freuen uns sehr, dass Sie uns eine Postkarte aus Ihrer Heimatstadt schicken und erwähnen, welches unserer Pakete Sie verwenden. Unsere Adresse finden Sie auf unserer Kontaktseite. Wir veröffentlichen alle erhaltenen Postkarten auf unserer virtuellen Postkartenwand.
Sie können das Paket über Composer installieren:
composer require spatie/laravel-schedule-monitor
Wenn Sie Laravel 8-Unterstützung benötigen, können Sie Version 2 des Pakets mit composer require spatie/laravel-schedule-monitor:^2
installieren.
Sie müssen Migrationen veröffentlichen und ausführen:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-migrations "
php artisan migrate
Sie können die Konfigurationsdatei veröffentlichen mit:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-config "
Dies ist der Inhalt der veröffentlichten Konfigurationsdatei:
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 ,
],
];
Der Zeitplanmonitor protokolliert jeden Start, jedes Ende und jeden Fehler aller geplanten Jobs. Nach einer Weile könnten die monitored_scheduled_task_log_items
groß werden.
Mit der Modellbereinigungsfunktion von Laravel können Sie alte MonitoredScheduledTaskLogItem
-Modelle löschen. Modelle, die älter sind als die in delete_log_items_older_than_days
in der schedule-monitor
Konfigurationsdatei konfigurierte Anzahl von Tagen, werden gelöscht.
// 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 ();
}
}
Jedes Mal, wenn Sie Ihre Anwendung bereitstellen, sollten Sie den Befehl schedule-monitor:sync
ausführen
php artisan schedule-monitor:sync
Dieser Befehl ist für die Synchronisierung Ihres Zeitplans mit der Datenbank und optional Oh Dear verantwortlich. Wir empfehlen dringend, diesen Befehl dem Skript hinzuzufügen, das Ihre Produktionsumgebung bereitstellt.
In einer Nicht-Produktionsumgebung sollten Sie schedule-monitor:sync
manuell ausführen. Mit der Funktion schedule-monitor:list
können Sie überprüfen, ob alles korrekt synchronisiert wurde.
Hinweis: Durch das Ausführen des Synchronisierungsbefehls werden alle anderen von Ihnen definierten Cron-Monitore außer dem Anwendungszeitplan entfernt.
Wenn Sie zerstörungsfreie Synchronisierungen mit Oh Dear verwenden möchten, damit Sie andere Cron-Aufgaben außerhalb von Laravel überwachen können, können Sie das Flag --keep-old
verwenden. Dadurch werden neue Aufgaben nur an „Oh Dear“ weitergeleitet und nicht vollständig synchronisiert. Beachten Sie, dass dadurch keine Aufgaben aus Oh Dear entfernt werden, die nicht mehr in Ihrem Zeitplan enthalten sind.
Um Ihren Zeitplan zu überwachen, sollten Sie zunächst schedule-monitor:sync
ausführen. Dieser Befehl wirft einen Blick auf Ihren Zeitplan und erstellt einen Eintrag für jede Aufgabe in der Tabelle monitored_scheduled_tasks
.
Um alle überwachten geplanten Aufgaben anzuzeigen, können Sie schedule-monitor:list
ausführen. Dieser Befehl listet alle überwachten geplanten Aufgaben auf. Es zeigt Ihnen an, wann eine geplante Aufgabe zuletzt gestartet, beendet oder fehlgeschlagen ist.
Das Paket schreibt jedes Mal einen Eintrag in die Tabelle monitored_scheduled_task_log_items
in der Datenbank, wenn eine geplante Aufgabe startet, endet, fehlschlägt oder übersprungen wird. Sehen Sie sich den Inhalt dieser Tabelle an, wenn Sie wissen möchten, wann und wie geplante Aufgaben ausgeführt wurden. Die Protokollelemente enthalten auch andere interessante Messwerte wie Speichernutzung, Ausführungszeit und mehr.
Der Zeitplanmonitor versucht, automatisch einen Namen für eine geplante Aufgabe zu ermitteln. Bei Befehlen ist dies der Befehlsname, bei anonymen Jobs wird der Klassenname des ersten Arguments verwendet. Für einige Aufgaben, wie z. B. geplante Schließungen, kann ein Name nicht automatisch ermittelt werden.
Um manuell einen Namen für die geplante Aufgabe festzulegen, können Sie monitorName()
anklicken.
Hier ist ein Beispiel.
// 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 ' );
}
Wenn Sie den Namen der Aufgabe ändern, entfernt der Zeitplanmonitor alle Protokollelemente des Monitors mit dem alten Namen und erstellt einen neuen Monitor mit dem neuen Namen der Aufgabe.
Wenn das Paket erkennt, dass die letzte Ausführung einer geplanten Aufgabe nicht rechtzeitig ausgeführt wurde, zeigt die schedule-monitor
diese Aufgabe mit einer roten Hintergrundfarbe an. In diesem Screenshot wurde die Aufgabe namens your-command
zu spät ausgeführt.
Das Paket stellt fest, dass eine Aufgabe zu spät ausgeführt wurde, wenn sie nicht zum vorgesehenen Zeitpunkt + der Kulanzzeit abgeschlossen wurde. Sie können sich die Kulanzzeit als die Anzahl der Minuten vorstellen, die eine Aufgabe unter normalen Umständen zum Abschluss benötigt. Standardmäßig gewährt das Paket jeder Aufgabe eine Kulanzzeit von 5 Minuten.
Sie können die Kulanzzeit anpassen, indem Sie die Methode graceTimeInMinutes
für eine Aufgabe verwenden. In diesem Beispiel wird eine Kulanzzeit von 10 Minuten für die your-command
Aufgabe verwendet.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Sie können die Überwachung einer geplanten Aufgabe vermeiden, indem Sie beim Planen der Aufgabe doNotMonitor
aktivieren.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitor ();
}
Sie können die Ausgabe speichern, indem Sie beim Planen der Aufgabe storeOutputInDb
anhängen.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> storeOutputInDb ();
}
Die Ausgabe wird in der Tabelle monitored_scheduled_task_log_items
im output
der meta
gespeichert.
Wenn Sie spatie/laravel-multitenancy verwenden, sollten Sie den PingOhDearJob
zum Array not_tenant_aware_jobs
in config/multitenancy.php
hinzufügen.
' not_tenant_aware_jobs ' => [
// ...
Spatie ScheduleMonitor Jobs PingOhDearJob::class,
]
Ohne sie schlägt der PingOhDearJob
fehl, da kein Mandant festgelegt wird.
Dieses Paket kann Ihren Zeitplan mit dem Oh Dear Cron Check synchronisieren. Oh Dear sendet Ihnen eine Benachrichtigung, wenn eine geplante Aufgabe nicht rechtzeitig abgeschlossen wird.
Um zu beginnen, müssen Sie zunächst das Oh Dear SDK installieren.
composer require ohdearapp/ohdear-php-sdk
Als Nächstes müssen Sie sicherstellen, dass die Schlüssel api_token
und site_id
des schedule-monitor
mit einem API-Token und einer Oh Dear-Site-ID gefüllt sind. Um zu überprüfen, ob diese Werte korrekt sind, können Sie diesen Befehl ausführen.
php artisan schedule-monitor:verify
Um Ihren Zeitplan mit Oh Dear zu synchronisieren, führen Sie diesen Befehl aus:
php artisan schedule-monitor:sync
Danach sollte der Befehl list
anzeigen, dass alle geplanten Aufgaben in Ihrer App bei Oh Dear registriert sind.
Um geplante Aufträge so kurz wie möglich zu halten, wird Oh Dear über in der Warteschlange befindliche Aufträge angepingt. Um eine schnelle Lieferung an Oh Dear zu gewährleisten und falsch-positive Benachrichtigungen zu vermeiden, empfehlen wir dringend, für diese Aufträge eine eigene Warteschlange einzurichten. Sie können den Namen dieser Warteschlange in den queue
der Konfigurationsdatei einfügen.
Oh Dear wartet eine bestimmte Anzahl von Minuten auf den Abschluss einer Zeitplanaufgabe. Dies wird als Gnadenzeit bezeichnet. Standardmäßig haben alle geplanten Aufgaben eine Kulanzzeit von 5 Minuten. Um diesen Wert anzupassen, können Sie graceTimeInMinutes
an Ihre geplanten Aufgaben anhängen.
Hier ist ein Beispiel, bei dem Oh Dear eine Benachrichtigung sendet, wenn die Aufgabe nicht bis 00:10 Uhr abgeschlossen wurde.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Wenn Sie möchten, dass eine Aufgabe vom Zeitplanmonitor überwacht wird, nicht jedoch von Oh Dear, können Sie doMonitorAtOhDear
zu Ihren geplanten Aufgaben hinzufügen.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitorAtOhDear ();
}
Derzeit funktioniert dieses Paket nicht für Aufgaben, die diese Methoden verwenden:
between
unlessBetween
when
skip
Wir gehen davon aus, dass eine geplante Aufgabe, die Benachrichtigungen versendet, wahrscheinlich auch nicht ausgeführt wird, wenn Ihre geplanten Aufgaben nicht ordnungsgemäß ausgeführt werden. Aus diesem Grund versendet dieses Paket selbst keine Benachrichtigungen.
Diese Dienste können Sie benachrichtigen, wenn geplante Aufgaben nicht ordnungsgemäß ausgeführt werden:
composer test
Weitere Informationen zu den letzten Änderungen finden Sie im CHANGELOG.
Weitere Informationen finden Sie unter BEITRAGEN.
Wenn Sie einen Sicherheitsfehler gefunden haben, senden Sie bitte eine E-Mail an [email protected], anstatt den Issue-Tracker zu verwenden.
Die MIT-Lizenz (MIT). Weitere Informationen finden Sie in der Lizenzdatei.