جدولة المهام في Laravel: أتمتة مهام الـ Cron

Amine
30/08/2024

المقدمة

جدولة المهام في Laravel توفر واجهة برمجة تطبيقات واضحة وقوية لتحديد المهام التي يجب تشغيلها بشكل مجدول باستخدام Cron على الخادم. بدلاً من إدارة كل مهمة يدويًا في جدول Cron، يمكنك تعريف جميع المهام المجدولة داخل Laravel مباشرة. يوفر هذا النهج المرونة في إدارة المهام وتحسين الصيانة والتنظيم.

الخطوة 1: إعداد Cron لتشغيل جدولة Laravel

لإعداد جدولة المهام في Laravel، تحتاج أولاً إلى إعداد مهمة Cron لتشغيل جدولة Laravel كل دقيقة. يمكنك تحرير جدول Cron الخاص بالخادم وإضافة السطر التالي:

* * * * * php /path/to/your/project/artisan schedule:run >> /dev/null 2>&1

استبدل /path/to/your/project بالمسار الفعلي لتطبيق Laravel على الخادم. سيقوم هذا الأمر بتشغيل جميع المهام المجدولة كل دقيقة.

الخطوة 2: تعريف المهام المجدولة في Laravel

يمكنك تعريف المهام المجدولة في Laravel داخل ملف app/Console/Kernel.php ضمن دالة schedule(). لنقم بإضافة بعض المهام المجدولة:

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // تشغيل أمر artisan كل يوم عند منتصف الليل
        $schedule->command('daily:report')->daily();

        // تشغيل وظيفة إغلاق الجلسات غير النشطة كل 5 دقائق
        $schedule->call(function () {
            DB::table('sessions')->where('active', false)->delete();
        })->everyFiveMinutes();

        // إرسال بريد إلكتروني تنبيهي كل يوم اثنين في 8 صباحًا
        $schedule->call(function () {
            Mail::to('[email protected]')->send(new WeeklySummary);
        })->weeklyOn(1, '8:00');
    }
}

يمكنك استخدام مجموعة متنوعة من التعبيرات الزمنية لجدولة المهام بدقة وفقًا للاحتياجات الخاصة بك. هنا بعض الأمثلة:

  • ->everyMinute(): لتشغيل المهمة كل دقيقة.->hourly(): لتشغيل المهمة كل ساعة.->dailyAt('13:00'): لتشغيل المهمة يوميًا في الساعة 1 بعد الظهر.->monthlyOn(4, '15:00'): لتشغيل المهمة كل شهر في اليوم الرابع في الساعة 3 مساءً.->yearly(): لتشغيل المهمة سنويًا.->cron('0 0 * * *'): لتحديد تعبير Cron مخصص.

في هذا المثال، نقوم بتعريف ثلاث مهام مجدولة مختلفة:

  • تشغيل أمر artisan مخصص كل يوم عند منتصف الليل.تشغيل وظيفة لإغلاق الجلسات غير النشطة في قاعدة البيانات كل 5 دقائق.إرسال بريد إلكتروني تنبيهي إلى المسؤول كل يوم اثنين في الساعة 8 صباحًا.
  • يمكنك استخدام مجموعة متنوعة من التعبيرات الزمنية لجدولة المهام بدقة وفقًا للاحتياجات الخاصة بك. هنا بعض الأمثلة:
  • ->everyMinute(): لتشغيل المهمة كل دقيقة.->hourly(): لتشغيل المهمة كل ساعة.->dailyAt('13:00'): لتشغيل المهمة يوميًا في الساعة 1 بعد الظهر.->monthlyOn(4, '15:00'): لتشغيل المهمة كل شهر في اليوم الرابع في الساعة 3 مساءً.->yearly(): لتشغيل المهمة سنويًا.->cron('0 0 * * *'): لتحديد تعبير Cron مخصص.
  • الخطوة 5: التعامل مع إخفاقات المهام المجدولة

    يمكنك تسجيل إخفاقات المهام المجدولة باستخدام دالة onFailure() أو onSuccess() لتحديد الإجراءات التي يجب اتخاذها في حالة فشل أو نجاح المهام:

    $schedule->command('daily:report')
        ->daily()
        ->onSuccess(function () {
            \Log::info('تم تنفيذ التقرير اليومي بنجاح.');
        })
        ->onFailure(function () {
            \Log::error('فشل في تنفيذ التقرير اليومي.');
        });

    بهذه الطريقة، يمكنك مراقبة حالة المهام المجدولة واتخاذ الإجراءات اللازمة في حالة حدوث أخطاء.

    الخاتمة

    جدولة المهام في Laravel تجعل إدارة المهام المجدولة أكثر سهولة ومرونة. من خلال إعداد مهام Cron داخل Laravel، يمكنك بسهولة تحديد وإدارة المهام المجدولة بطريقة منظمة وآمنة. استمر في استكشاف ميزات Laravel لتحسين تطبيقاتك وتحسين أدائها.

    التعليقات

    اترك تعليقاً