ما هو مجدول المهام في PHP؟
مجدول المهام (task scheduler) هو أداة لأتمتة تنفيذ العمليات المتكررة في تطبيقات PHP. على عكس CRON، الذي يُدار على مستوى الخادم، تتيح المكتبات الخاصة بـ PHP تحديد الجدول الزمني بمرونة مباشرة في كود المشروع، مما يدمج المهام مع منطق الأعمال (مثل إرسال النشرات البريدية، تنظيف ذاكرة التخزين المؤقت، إنشاء التقارير).
لماذا نحتاج إلى مجدول المهام؟
بدون مجدول، يضطر المطورون إلى تشغيل البرامج النصية يدويًا عبر CRON، مما يعقد إدارة التبعيات والاختبار. يحل مجدول PHP هذه المشكلات:
- المرونة: يمكن إيقاف المهام مؤقتًا، وتغيير تكرارها دون تعديل ملفات النظام.
- التسجيل: آليات مدمجة لتسجيل الأخطاء والتنفيذ.
- قوائم الانتظار: التكامل مع RabbitMQ، Redis للمهام الخلفية.
- الاختبار: يمكن تشغيل المهام يدويًا من وحدة التحكم أو عبر الاختبارات.
التثبيت
المجدول الشائع هو vlucas/phpdotenv (لا تخلط بينه وبين dotenv) أو cron-expression. لكن الأكثر وظيفية هو symfony/scheduler (من Symfony) أو peppeocchi/php-cron-scheduler. التثبيت عبر Composer:
composer require peppeocchi/php-cron-schedulerالوظائف الرئيسية
- دعم تعبيرات CRON:
*/5 * * * *— كل 5 دقائق. - المهام لمرة واحدة: بوقت تنفيذ محدد.
- المهام الشرطية: التشغيل فقط إذا تحقق شرط (مثل وجود ملف).
- التنفيذ المتوازي: المهام لا تمنع بعضها البعض.
- معالجة الأخطاء: إعادة تلقائية عند الفشل.
مثال على كود PHP
require 'vendor/autoload.php';
use GO\\Scheduler;
$scheduler = new Scheduler();
// مهمة كل 10 دقائق$scheduler->php('/path/to/script.php') ->everyMinute(10) ->output('/tmp/output.log');
// مهمة بتعبير CRON$scheduler->call(function() { echo "جارٍ إرسال البريد الإلكتروني...";})->cron('0 9 * * 1'); // كل يوم اثنين الساعة 9 صباحًا
// مهمة شرطية$scheduler->php('/path/to/report.php') ->daily() ->when(function() { return file_exists('/tmp/flag.txt'); });
$scheduler->run();متى نستخدمه؟
المجدول مثالي لـ:
- تنظيف الملفات المؤقتة أو قاعدة البيانات بانتظام.
- إرسال إشعارات الدفع وفقًا لجدول زمني.
- تحديث البيانات المجمعة (مثل التصنيفات).
- التكامل مع واجهات برمجة التطبيقات الخارجية (التحليل، المزامنة).
تجنب استخدام المجدول للمهام التي تتطلب تنفيذًا فوريًا — فمن الأفضل استخدام قوائم الانتظار (مثل RabbitMQ أو Redis) لهذا الغرض.
الخلاصة
مجدول المهام في PHP هو أداة قوية لأتمتة المهام الروتينية. إنه مفيد بشكل خاص في المشاريع التي تكون فيها إدخالات CRON على الخادم غير ملائمة أو تتطلب تغييرات متكررة. التثبيت عبر Composer يستغرق دقيقة، والإعدادات المرنة تسمح بتكييف الجدول الزمني مع أي عمليات تجارية.