# ============================================================ # جدول المهام المجدولة — سيرو الأردن (بعد الانتقال إلى دوكر) # ============================================================ # المشكلة التي يعالجها هذا الملف: # # الجدول القديم كان يشغّل كل السكربتات على المضيف مباشرة: # /usr/bin/php8.4 /home/intaleqapp-jordan-siro/htdocs/.../backend/... # # بعد الانتقال إلى دوكر لم تعد هذه السكربتات قادرة على العمل: # # • Redis لا يَنشر أي بورت إلى المضيف (انظر خدمة redis في # docker-compose.yml — لا يوجد فيها ports:). أي أن Redis يُرى فقط # من داخل شبكة دوكر. كل سكربت على المضيف يحصل على $redis = null. # # • MySQL منشور على 127.0.0.1:33061 وليس 3306، فأي .env على المضيف # ما زال يشير إلى 3306 يفشل في الاتصال. # # • bootstrap.php يستنتج مسار .env من __DIR__ عبر المطابقة مع # ^/home/[^/]+ — فسكربتات المضيف تقرأ /home/intaleqapp-jordan-siro/.env # (ملف ما قبل دوكر)، بينما الحاويات تقرأ متغيّراتها من docker/.env. # نتيجةً لذلك كان الطرفان يعملان بإعدادات مختلفة تماماً. # # الحل: تشغيل كل شيء داخل حاوية php، حيث أسماء الشبكة (mysql / redis) # والمتغيّرات صحيحة. هذا نفس الدرس المستفاد من عطل السوكيتات سابقاً. # # ------------------------------------------------------------ # التركيب: # crontab -e ثم الصق المحتوى أدناه # # ملاحظة: المستخدم الذي يملك الـ crontab يجب أن يكون عضواً في مجموعة # docker، وإلا فشل كل سطر بخطأ صلاحيات. # ------------------------------------------------------------ SIRO=/home/intaleqapp-jordan-siro/htdocs/jordan-siro.intaleqapp.com/docker DEX=/usr/bin/docker compose -f $SIRO/docker-compose.yml exec -T php php # ============================================================ # مواصلاتي (Transit) # ============================================================ */1 * * * * $DEX /var/www/backend/transit/cron_approaching_alerts.php >> /var/log/transit_alerts.log 2>&1 0 3 * * * $DEX /var/www/backend/transit/cron_sync_members.php >> /var/log/transit_sync.log 2>&1 30 3 * * * $DEX /var/www/backend/transit/cron_cleanup.php >> /var/log/transit_cleanup.log 2>&1 # ============================================================ # محرّك التسعير والبوتات # ============================================================ # تغذية طابور مهام البوت في Redis. # كان الجدول القديم يشغّل generate_10_tasks_cli.php وهو يكتب إلى # tasks.json الذي يقرأه standalone_worker.php (نسخة اختبار محلي بلا # قاعدة بيانات). النتائج لم تكن تصل إلى scraped_competitor_prices إطلاقاً. */15 * * * * $DEX /var/www/backend/bot/push_10_tasks.php >> /var/log/bot_tasks.log 2>&1 */5 * * * * $DEX /var/www/backend/bot/cron_kazan_adjuster.php >> /var/log/bot_kazan.log 2>&1 */10 * * * * $DEX /var/www/backend/bot/cron_surge_opportunity.php >> /var/log/bot_surge.log 2>&1 */16 * * * * $DEX /var/www/backend/bot/cron_generate_heatmap_cache.php >> /var/log/bot_heatmap.log 2>&1 0 * * * * $DEX /var/www/backend/bot/cron_seasonal_pricing.php >> /var/log/bot_seasonal.log 2>&1 0 * * * * $DEX /var/www/backend/bot/cron_predictive_demand.php >> /var/log/bot_demand.log 2>&1 0 */3 * * * $DEX /var/www/backend/bot/cron_ai_engine.php >> /var/log/bot_ai.log 2>&1 0 */3 * * * $DEX /var/www/backend/bot/cron_pricing_stability_engine.php >> /var/log/bot_stability.log 2>&1 # لقطة لوحة المعلومات — كانت مسجّلة ثلاث مرات (ساعياً + يومياً 3ص + # أسبوعياً الاثنين 4ص). التشغيل الساعي يغطي الاثنين الآخرين بالكامل، # وكانت النسخ الثلاث تتسابق على نفس الجداول عند الساعة 3 صباحاً. 0 * * * * $DEX /var/www/backend/bot/cron_dashboard_snapshot.php >> /var/log/bot_snapshot.log 2>&1 # ============================================================ # الإشعارات والتسويق # ============================================================ 0 * * * * $DEX /var/www/backend/bot/cron_auto_marketing_pusher.php >> /var/log/bot_pusher.log 2>&1 0 10 * * * $DEX /var/www/backend/bot/cron_passenger_reengagement.php >> /var/log/bot_reengage.log 2>&1 0 0 * * 0 $DEX /var/www/backend/bot/cron_weekly_health_report.php >> /var/log/bot_health.log 2>&1 0 */3 * * * $DEX /var/www/backend/marketing_engine/telegram_scraper.php >> /var/log/mkt_telegram.log 2>&1 0 */4 * * * $DEX /var/www/backend/marketing_engine/cron_insert_task.php >> /var/log/mkt_tasks.log 2>&1 0 10 * * 0 $DEX /var/www/backend/marketing_engine/cron_weekly_report.php >> /var/log/mkt_weekly.log 2>&1 # ============================================================ # انتقالي — يُحذف بعد التأكد من مسار worker.php # ============================================================ # يفرّغ results.json (مخرجات standalone_worker.php القديم) إلى MySQL. # بعد انتقال البوت إلى worker.php لن يُكتب هذا الملف، وسيطبع السكربت # "No results file found" ثم يخرج. أبقِه أسبوعاً لاستيعاب أي نتائج # متبقّية، ثم احذف السطر. 0 * * * * $DEX /var/www/backend/bot/cron_empty_results_to_db.php >> /var/log/bot_drain.log 2>&1 # ============================================================ # سكربتات موجودة في الكود وغير مجدولة — قرار مطلوب # ============================================================ # backend/bot/cron_gemini_advisor.php # backend/bot/cron_silent_push_inactive.php # backend/bot/cron_generate_pricing_cache.php # لم تكن في الجدول القديم. راجعها وقرّر: تُجدول أم تُحذف من الكود.