ما هو مُجدول مهام PHP؟
مُجدول المهام (Job Scheduler) هو مكتبة لـ PHP تتيح تنفيذ المهام الدورية (مهام cron) مباشرة من كود التطبيق، دون الاعتماد على cron النظامي. وهو مفيد بشكل خاص في الاستضافات المشتركة (shared-hosting) حيث يكون الوصول إلى crontab محدودًا، أو في البيئات المعزولة (Docker).
لماذا نحتاج إلى مُجدول المهام؟
- الاستقلالية — جميع قواعد الدورية تُخزّن في كود PHP، وليس في ملفات إعدادات النظام.
- المرونة — يمكن تغيير الجدول الزمني ديناميكيًا، وإيقاف المهام مؤقتًا، وتسجيل التنفيذ.
- التكامل — يندمج بسهولة مع الأطر (Laravel, Symfony) و ORM.
التثبيت
قم بالتثبيت عبر Composer:
composer require dragonmantank/cron-expressionهذه مكتبة أساسية للتعامل مع تعبيرات cron. للحصول على مُجدول مهام متكامل، غالبًا ما يُستخدم peppeocchi/php-cron-scheduler:
composer require peppeocchi/php-cron-schedulerالوظائف الأساسية
- تحليل تعبيرات cron — التحقق مما إذا كان الوقت الحالي يتطابق مع النمط (
* * * * *). - تعدد المهام — تشغيل عدة مهام في عملية واحدة.
- التوازي — عبر
exec()أوpcntl_fork(). - تسجيل الأحداث (Logging) — إخراج stdout/stderr إلى ملف.
- معالجة الأخطاء — إعادة المحاولة، الإشعارات.
مثال على الكود
<?phprequire 'vendor/autoload.php';
use GO\\Scheduler;
$scheduler = new Scheduler();
// مهمة: كل دقيقة$scheduler->call(function() { echo "يتم التنفيذ في " . date('Y-m-d H:i:s') . "";})->everyMinute();
// مهمة: كل ساعة عند الدقيقة 30$scheduler->call('cleanup_logs')->at('30 * * * *');
// مهمة: أيام العمل في الساعة 9:00$scheduler->exec('php artisan report:generate')->at('0 9 * * 1-5');
// تشغيل جميع المهام الجاهزة$scheduler->run();متى يُستخدم
مُجدول مهام PHP مثالي من أجل:
- إرسال النشرات البريدية الإلكترونية وفق جدول زمني؛
- تنظيف البيانات القديمة (السجلات، الجلسات)؛
- توليد التقارير في ساعات غير الذروة؛
- المزامنة مع واجهات برمجة التطبيقات الخارجية (مرة كل ساعة)؛
- تحديث ذاكرة التخزين المؤقت (مرة كل 5 دقائق).
لا تستبدل cron النظامي للعمليات النظامية الحرجة (النسخ الاحتياطي لقاعدة البيانات، تحديث الشهادات) — استخدمه كطبقة إضافية لمنطق الأعمال.