ستراقب هذه الحزمة جدول Laravel الخاص بك. سيكتب إدخالاً إلى جدول السجل في قاعدة البيانات في كل مرة تبدأ فيها مهام الجدول الزمني أو تنتهي أو تفشل أو يتم تخطيها. باستخدام أمر list
، يمكنك التحقق من وقت تنفيذ المهام المجدولة.
يمكن لهذه الحزمة أيضًا مزامنة جدولك الزمني مع Oh Dear. سوف يرسل لك Oh Dear إشعارًا عندما لا يتم تشغيل المهمة المجدولة في الوقت المحدد أو عندما تفشل.
نحن نستثمر الكثير من الموارد في إنشاء أفضل الحزم مفتوحة المصدر في فئتها. يمكنك دعمنا عن طريق شراء أحد منتجاتنا المدفوعة.
نحن نقدر بشدة إرسالك لنا بطاقة بريدية من مسقط رأسك، مع ذكر الحزمة (الحزم) التي تستخدمها. ستجد عنواننا على صفحة الاتصال لدينا. ننشر جميع البطاقات البريدية المستلمة على جدار البطاقات البريدية الافتراضية لدينا.
يمكنك تثبيت الحزمة عبر الملحن:
composer require spatie/laravel-schedule-monitor
إذا كنت بحاجة إلى دعم Laravel 8، فيمكنك تثبيت الإصدار 2 من الحزمة باستخدام composer require spatie/laravel-schedule-monitor:^2
.
يجب عليك نشر وتشغيل عمليات الترحيل:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-migrations "
php artisan migrate
يمكنك نشر ملف التكوين باستخدام:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-config "
هذه هي محتويات ملف التكوين المنشور:
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 ,
],
];
سيقوم مراقب الجدول الزمني بتسجيل كل بداية وانتهاء وفشل لجميع المهام المجدولة. بعد فترة من الوقت، قد تصبح عناصر monitored_scheduled_task_log_items
كبيرة الحجم.
استخدم ميزة تقليم النماذج في Laravel، ويمكنك حذف نماذج MonitoredScheduledTaskLogItem
القديمة. سيتم حذف النماذج الأقدم من مقدار الأيام التي تم تكوينها في delete_log_items_older_than_days
في ملف تكوين 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 ();
}
}
في كل مرة تقوم فيها بنشر تطبيقك، يجب عليك تنفيذ أمر schedule-monitor:sync
php artisan schedule-monitor:sync
هذا الأمر مسؤول عن مزامنة الجدول الزمني الخاص بك مع قاعدة البيانات، واختياريًا يا عزيزي. نوصي بشدة بإضافة هذا الأمر إلى البرنامج النصي الذي ينشر بيئة الإنتاج الخاصة بك.
في البيئات غير الإنتاجية، يجب عليك تشغيل schedule-monitor:sync
يدويًا. يمكنك التحقق مما إذا كان كل شيء قد تمت مزامنته بشكل صحيح باستخدام schedule-monitor:list
.
ملاحظة: سيؤدي تشغيل أمر المزامنة إلى إزالة أي أجهزة مراقبة cron أخرى قمت بتحديدها بخلاف جدول التطبيق.
إذا كنت ترغب في استخدام عمليات المزامنة غير المدمرة مع Oh Dear حتى تتمكن من مراقبة مهام cron الأخرى خارج Laravel، فيمكنك استخدام العلامة --keep-old
. سيؤدي هذا إلى دفع المهام الجديدة إلى يا عزيزي، بدلاً من المزامنة الكاملة. لاحظ أن هذا لن يؤدي إلى إزالة أي مهام من Oh Dear لم تعد موجودة في جدولك.
لمراقبة الجدول الزمني الخاص بك، يجب عليك أولاً تشغيل schedule-monitor:sync
. سيقوم هذا الأمر بإلقاء نظرة على الجدول الزمني الخاص بك وإنشاء إدخال لكل مهمة في جدول monitored_scheduled_tasks
.
لعرض كافة المهام المجدولة التي يتم مراقبتها، يمكنك تشغيل schedule-monitor:list
. سيقوم هذا الأمر بسرد جميع المهام المجدولة التي يتم مراقبتها. سيُظهر لك متى بدأت مهمة مجدولة أو انتهت أو فشلت آخر مرة.
ستكتب الحزمة إدخالاً إلى جدول monitored_scheduled_task_log_items
في قاعدة البيانات في كل مرة تبدأ فيها مهام الجدول الزمني أو تنتهي أو تفشل أو يتم تخطيها. ألقِ نظرة على محتويات هذا الجدول إذا كنت تريد معرفة متى وكيف تم تنفيذ المهام المجدولة. تحتوي عناصر السجل أيضًا على مقاييس أخرى مثيرة للاهتمام مثل استخدام الذاكرة ووقت التنفيذ والمزيد.
سيحاول مراقب الجدولة تحديد اسم للمهمة المجدولة تلقائيًا. بالنسبة للأوامر، هذا هو اسم الأمر، أما بالنسبة للوظائف المجهولة، فسيتم استخدام اسم فئة الوسيطة الأولى. بالنسبة لبعض المهام، مثل عمليات الإغلاق المجدولة، لا يمكن تحديد الاسم تلقائيًا.
لتعيين اسم للمهمة المجدولة يدويًا، يمكنك النقر على monitorName()
.
هنا مثال.
// 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 ' );
}
عندما تقوم بتغيير اسم المهمة، ستقوم شاشة الجدولة بإزالة كافة عناصر السجل الخاصة بالشاشة بالاسم القديم، وإنشاء شاشة جديدة باستخدام الاسم الجديد للمهمة.
عندما تكتشف الحزمة أن التشغيل الأخير لمهمة مجدولة لم يتم تشغيله في الوقت المناسب، ستعرض قائمة schedule-monitor
تلك المهمة باستخدام لون خلفية أحمر. في لقطة الشاشة هذه، تم تشغيل المهمة المسماة your-command
بعد فوات الأوان.
ستحدد الحزمة أن المهمة قد تأخرت كثيرًا إذا لم تكن قد انتهت في الوقت الذي كان من المفترض أن يتم تشغيلها + وقت السماح. يمكنك اعتبار وقت السماح بمثابة عدد الدقائق التي تحتاج المهمة إلى الانتهاء منها في الظروف العادية. بشكل افتراضي، تمنح الحزمة وقت سماح قدره 5 دقائق لكل مهمة.
يمكنك تخصيص وقت السماح باستخدام الأسلوب graceTimeInMinutes
في مهمة ما. في هذا المثال، يتم استخدام وقت سماح قدره 10 دقائق لمهمة your-command
.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
يمكنك تجنب مراقبة مهمة مجدولة عن طريق التعامل مع doNotMonitor
عند جدولة المهمة.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitor ();
}
يمكنك تخزين الإخراج عن طريق التعامل مع storeOutputInDb
عند جدولة المهمة.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> storeOutputInDb ();
}
سيتم تخزين الإخراج في جدول monitored_scheduled_task_log_items
، في مفتاح output
لعمود meta
.
إذا كنت تستخدم spatie/laravel-multitenancy، فيجب عليك إضافة PingOhDearJob
إلى المصفوفة not_tenant_aware_jobs
في config/multitenancy.php
.
' not_tenant_aware_jobs ' => [
// ...
Spatie ScheduleMonitor Jobs PingOhDearJob::class,
]
بدونها، سوف تفشل PingOhDearJob
حيث لن يتم تعيين أي مستأجر.
يمكن لهذه الحزمة مزامنة الجدول الزمني الخاص بك مع فحص Oh Dear cron. سوف يرسل لك Oh Dear إشعارًا عندما لا تنتهي المهمة المجدولة في الوقت المحدد.
للبدء، ستحتاج أولاً إلى تثبيت Oh Dear SDK.
composer require ohdearapp/ohdear-php-sdk
بعد ذلك، تحتاج إلى التأكد من أن مفاتيح api_token
و site_id
الخاصة schedule-monitor
مملوءة برمز واجهة برمجة التطبيقات ومعرف موقع Oh Dear. للتحقق من أن هذه القيم تحمل القيم الصحيحة يمكنك تشغيل هذا الأمر.
php artisan schedule-monitor:verify
لمزامنة جدولك الزمني مع Oh Dear، قم بتشغيل هذا الأمر:
php artisan schedule-monitor:sync
بعد ذلك، يجب أن يوضح أمر list
أن جميع المهام المجدولة في تطبيقك مسجلة على Oh Dear.
لإبقاء المهام المجدولة قصيرة قدر الإمكان، سيتم إرسال رسالة إلى Oh Dear عبر المهام الموجودة في قائمة الانتظار. لضمان سرعة التسليم إلى Oh Dear، ولتجنب الإشعارات الإيجابية الكاذبة، نوصي بشدة بإنشاء قائمة انتظار مخصصة لهذه المهام. يمكنك وضع اسم قائمة الانتظار هذه في مفتاح queue
لملف التكوين.
يا عزيزي سوف تنتظر الانتهاء من جدول المهام لمدة معينة من الدقائق. وهذا ما يسمى وقت السماح. بشكل افتراضي، سيكون لجميع المهام المجدولة فترة سماح مدتها 5 دقائق. لتخصيص هذه القيمة، يمكنك إضافة graceTimeInMinutes
إلى مهامك المجدولة.
فيما يلي مثال حيث سيرسل Oh Dear إشعارًا إذا لم تنتهي المهمة بحلول الساعة 00:10.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
إذا كنت ترغب في مراقبة مهمة ما بواسطة مراقب الجدول الزمني، ولكن ليس بواسطة Oh Dear، فيمكنك إضافة doMonitorAtOhDear
إلى مهامك المجدولة.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitorAtOhDear ();
}
حاليًا، لا تعمل هذه الحزمة مع المهام التي تستخدم هذه الطرق:
between
unlessBetween
when
skip
نحن نفترض أنه عندما لا تعمل المهام المجدولة بشكل صحيح، فمن المحتمل ألا يتم تشغيل المهمة المجدولة التي ترسل إشعارات أيضًا. ولهذا السبب لا ترسل هذه الحزمة إشعارات من تلقاء نفسها.
يمكن لهذه الخدمات إعلامك عندما لا تعمل المهام المجدولة بشكل صحيح:
composer test
الرجاء مراجعة سجل التغيير للحصول على مزيد من المعلومات حول ما تغير مؤخرًا.
يرجى الاطلاع على المساهمة للحصول على التفاصيل.
إذا وجدت خطأً يتعلق بالأمان، فيرجى إرسال بريد إلكتروني إلى العنوان [email protected] بدلاً من استخدام أداة تعقب المشكلات.
رخصة معهد ماساتشوستس للتكنولوجيا (MIT). يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.