Back to blog
DevOps & Automation September 22, 2026

ما هو Cron Job؟ الدليل الشامل لفهم وجدولة المهام في لينكس (مع أمثلة وأداة إنشاء مجانية)

SSumit Nath
Automate WhatsApp Alerts
Start Free ➔

🌐 Read this guide in English (اقرأ هذا الدليل باللغة الإنجليزية) →

في عالم تطوير الويب، هندسة الأنظمة الخلفية (Backend)، وإدارة الخوادم (DevOps)، تتكرر المهام الروتينية بشكل مستمر: سواء كان ذلك أخذ نسخة احتياطية من قاعدة البيانات يومياً عند منتصف الليل، مزامنة الاشتراكات والفواتير الشهرية، حذف الملفات المؤقتة المتراكمة، أو إرسال النشرات الإخبارية البريدية للمستخدمين.

تقوم الخوادم بتنفيذ هذه المهام بشكل آلي ودوري في الخلفية باستخدام أداة شهيرة في أنظمة يونكس ولينكس تُعرف باسم Cron Job (وظيفة كرون).

لكن، على الرغم من أن cron يُعد من أقدم وأكثر أدوات الجدولة اعتماداً في عالم البرمجة، فإنه أيضاً السبب الرئيسي وراء أخطر حوادث التوقف الصامتة. عندما تفشل مهمة cron في الخادم، فإنها تفشل في صمت تام دون إظهار أي رسالة خطأ على موقعك—مما يجعلك تفاجأ بعد أشهر بأن النسخ الاحتياطية لم تكن تعمل إطلاقاً!

في هذا الدليل الشامل، سنتعرف بالتفصيل على ما هو Cron Job، كيف تُكتب صيغة الـ 5 حقول الخاصة به، لماذا تفشل المهام بصمت في بيئات الإنتاج، وكيف يمكنك حماية خوادمك عبر مراقبة النبض (Heartbeat Monitoring) والحصول على تنبيهات فورية عبر واتساب وتليجرام.


1. ما هو الـ Cron Job؟

الـ Cron Job هو برنامج أو أمر مجدول زمنيًا يعمل تلقائيًا في الخلفية على أنظمة التشغيل مثل Linux و macOS والأنظمة الشبيهة بـ Unix. يعتمد على خدمة نظام خلفية دائمة العمل تُسمى crond (أو cron daemon)، والتي تستيقظ كل دقيقة لفحص المهام المطلوب تنفيذها.

                              كيف يعمل الـ Cron Daemon
                              
                              [ crond Daemon في الخلفية ]
                                          │
                                          ▼ (يستيقظ كل 60 ثانية)
                               [ قراءة ملفات /etc/crontab وجداول المستخدمين ]
                                          │
                          ┌───────────────┴───────────────┐
                          ▼                               ▼
                     لا يوجد تطابق:                 يوجد تطابق زمني:
                النوم حتى الدقيقة التالية           تنفيذ الأمر فوراً (fork -> exec)

تتم قراءة الإعدادات من جداول تُعرف باسم crontab (اختصاراً لـ cron table). كل سطر داخل هذا الملف يمثل مهمة واحدة ويحتوي على توقيت التنفيذ والأمر المراد تشغيله.

أشهر الاستخدامات في بيئات العمل الحقيقية:

  • النسخ الاحتياطي لقواعد البيانات: تفريغ قاعدة بيانات PostgreSQL أو MySQL ورفعها إلى Amazon S3 يومياً الساعة 02:00 صباحاً.
  • معالجة الفواتير والاشتراكات: خصم الاشتراكات الدورية ومعالجة webhooks من Stripe أو بوابات الدفع.
  • تدوير سجلات النظام (Log Rotation): ضغط وحذف ملفات السجلات في /var/log أسبوعياً لتجنب امتلاء القرص الصلب.
  • تنظيف الذاكرة المؤقتة (Cache Pruning): حذف الجلسات المنتهية في Redis والملفات المؤقتة كل ساعة.
  • إرسال التقارير البريدية: إرسال ملخص يومي لمدراء النظام في الساعة 08:00 صباحاً.

2. فهم صيغة تعبيرات Cron (الحقول الـ 5)

يتكون أي أمر في ملف الـ crontab من 5 حقول زمنية متبوعة بالأمر المراد تنفيذه:

┌─────────────── الدقيقة (Minute: 0 - 59)
│ ┌───────────── الساعة (Hour: 0 - 23)
│ │ ┌─────────── يوم من الشهر (Day of Month: 1 - 31)
│ │ │ ┌───────── الشهر (Month: 1 - 12)
│ │ │ │ ┌─────── يوم من الأسبوع (Day of Week: 0 - 6 حيث 0 = الأحد)
│ │ │ │ │
* * * * *  /usr/local/bin/backup-database.sh

الرموز الأساسية الأربعة في تعبيرات Cron:

الرمزالاسمالوظيفةمثالالشرح
*النجمة (Asterisk)تطابق كل قيمة ممكنة في هذا الحقل* في حقل الساعةيتم التنفيذ في كل ساعة من اليوم
,الفاصلة (Comma)تحديد قائمة قيم منفصلة15,45 في الدقيقةيتم التنفيذ عند الدقيقة 15 والدقيقة 45
-الشرطة (Hyphen)تحديد نطاق زمني متصل1-5 في يوم الأسبوعيتم التنفيذ من الإثنين إلى الجمعة
/الشرطة المائلة (Slash)تحديد فترات التكرار (Step)*/15 في الدقيقةيتم التنفيذ كل 15 دقيقة (0, 15, 30, 45)

3. أمثلة عملية جاهزة للنسخ والاستخدام

إليك أشهر التعبيرات الزمنية المستخدمة في الخوادم وقواعد البيانات:

# 1. التشغيل كل 5 دقائق
*/5 * * * * /usr/local/bin/check-health.sh

# 2. التشغيل على رأس كل ساعة بالضبط (مثال: 01:00، 02:00)
0 * * * * /usr/local/bin/sync-cache.sh

# 3. التشغيل يومياً في منتصف الليل (00:00)
0 0 * * * /usr/local/bin/nightly-backup.sh

# 4. التشغيل كل يوم أحد في الساعة 03:30 صباحاً
30 3 * * 0 /usr/local/bin/weekly-log-rotate.sh

# 5. التشغيل في أيام العمل (من الإثنين إلى الجمعة) الساعة 09:00 صباحاً
0 9 * * 1-5 /usr/local/bin/dispatch-morning-reports.sh

# 6. التشغيل في اليوم الأول من كل شهر الساعة 06:00 صباحاً
0 6 1 * * /usr/local/bin/process-monthly-invoices.sh

🛠️ أدوات مطورين مجانية من Pingzo:


4. كيفية إدارة Crontab على خادمك

لإنشاء أو تعديل أو عرض المهام المجدولة على نظام لينكس، استخدم أوامر crontab القياسية:

# تعديل ملف المهام للمستخدم الحالي
crontab -e

# عرض قائمة المهام المجدولة النشطة للمستخدم الحالي
crontab -l

# حذف جميع مهام الـ cron للمستخدم الحالي
crontab -r

# تعديل مهام مستخدم معين مثل مستخدم الويب www-data (يتطلب صلاحيات root)
sudo crontab -u www-data -e

5. الفخاخ القاتلة الأربعة: لماذا تفشل المهام في صمت؟

أكبر عيب في معمارية cron التقليدية هو عدم وجود أي نظام مدمج للإبلاغ عن الأخطاء. إذا توقف سكريبت النسخ الاحتياطي بسبب خطأ في الذاكرة، فإن الخادم لن يظهر أي تحذير، وموقعك سيظل يعمل بشكل طبيعي دون أن تدري أن هناك كارثة بالخلفية.

إليك الأسباب الأربعة الأكثر شيوعاً للفشل الصامت:

                               فخاخ الفشل الصامت في Cron
                             
      [ 1. بيئة PATH المحدودة ]     [ 2. اختفاء رسائل الخطأ ]   [ 3. تداخل العمليات المعلقة ]   [ 4. إعادة تشغيل الخادم ]
      Cron يعمل بمسار محدود جداً   ينتهي الأمر بكود خطأ 1،     يستغرق السكريبت 15 دقيقة        يعيد الخادم تشغيل نفسه وقت
      لذا تفشل أوامر Node و Python  لكن لا تصلك أي رسالة       لكنه مجدول كل 10 دقائق فيحدث    المهمة، فيتم تجاوزها نهائياً
      و Docker دون علمك.           تنبيه على الإطلاق.          تراكم يستهلك الرام.            دون إعادة محاولة.

الفخ الأول: بيئة المتغيرات PATH المحدودة

عندما تفتح الطرفية (Terminal) يدوياً، يتم تحميل مسارات مثل /usr/local/bin أو إصدارات nvm و Docker من ملف .bashrc. لكن عندما يقوم cron بتشغيل مهمة، فإنه يستخدم بيئة معزولة تكون فيها قيمة PATH محدودة جداً بـ /usr/bin:/bin.

  • المشكلة: قد يعمل السكريبت الذي يحتوي على node app.js أو docker compose بشكل ممتاز عند اختباره يدوياً، ولكنه يفشل فوراً عند تشغيله عبر cron برسالة command not found.
  • الحل: استخدم دائماً المسار الكامل للأمر (مثل /usr/local/bin/node أو /usr/bin/curl) أو عرّف متغير PATH في أعلى ملف crontab.

الفخ الثاني: اختفاء رسائل الخطأ (Silent Exit Codes)

إذا كان خادم قاعدة البيانات تحت ضغط عالٍ وتوقف سكريبت النسخ الاحتياطي بسبب انتهاء الوقت (Timeout)، فسينتهي الأمر بكود خطأ 1 أو 127. إذا لم تكن قد قمت بتهيئة خادم بريد محلي، فإن هذه الرسالة ستختفي تماماً في الهواء.

  • النتيجة الكارثية: تكتشف أن النسخ الاحتياطي متوقف منذ 4 أشهر فقط عندما يتعرض الخادم للاختراق أو تلف القرص الصلب وتحتاج لاستعادة البيانات.

الفخ الثالث: تداخل العمليات واستهلاك الذاكرة (Process Stampede)

إذا كان لديك سكريبت مزامنة مجدول ليعمل كل 10 دقائق (*/10 * * * *)، ويستغرق في العادة دقيقتين. إذا حدث بطء في الشبكة واستغرق 14 دقيقة:

  1. عند الدقيقة 10، سيقوم cron بتشغيل نسخة ثانية من السكريبت.
  2. تتنافس النسختان على موارد المعالج وقفل قاعدة البيانات، مما يزيد من البطء.
  3. عند الدقيقة 20، تبدأ نسخة ثالثة.
  4. يمتلئ خادمك بالعمليات العالقة وتنفد الذاكرة العشوائية (RAM)، مما يؤدي إلى انهيار الخادم بالكامل (OOM Crash).

الفخ الرابع: إعادة تشغيل الخادم وقت المهمة

لا يمتلك cron قائمة انتظار للمهام المؤجلة. إذا تمت إعادة تشغيل الخادم لتثبيت تحديثات أمنية في نفس الدقيقة المجدولة لمهمتك (مثلاً 03:00 صباحاً)، فإن cron يتجاهل المهمة ولا يحاول تشغيلها مجدداً حتى اليوم التالي.


6. الحل الجذري: مراقبة النبض (Heartbeat Monitoring) مع تنبيهات واتساب

لمنع الفشل الصامت من التسبب في فقدان البيانات، يستخدم مهندسو موثوقية المواقع (SRE) أسلوب مراقبة النبض (Heartbeat Monitoring / Dead Man's Switch).

                      كيف تعمل مراقبة النبض في Pingzo
                       
       [ مهمة الـ Cron المجدولة ] ──( يتم التنفيذ بنجاح )──> [ رابط نبض Pingzo ]
                                                                      │
                         ┌────────────────────────────────────────────┴────────────────────────────────────────────┐
                         ▼                                                                                         ▼
                  تم استلام النبض:                                                                        فات موعد النبض:
            المهمة سليمة (إعادة ضبط المؤقت)                                                                إرسال تنبيه طارئ فوري!
                                                                                                          (عبر واتساب، تليجرام، سلاك)

كيف تبدأ في 3 خطوات بسيطة:

  1. أنشئ مراقب نبض في Pingzo: حدد التكرار المتوقع للمهمة (مثال: مرة كل 24 ساعة مع فترة سماح 15 دقيقة). سيعطيك Pingzo رابطاً فريداً خاصاً بمهمتك.
  2. أضف أمر curl في سطر واحد داخل Crontab:
    # شغّل سكريبت النسخ، ولا ترسل إشارة النجاح إلا إذا نجح السكريبت تماماً (&&)
    0 2 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 --retry 3 https://www.pingzoapp.com/api/ping/YOUR_SECRET_KEY
    
  3. تنبيهات فورية عند أي خلل:
    • إذا فشل السكريبت، فلن يتم تشغيل أمر curl.
    • إذا توقف الخادم أو انقطعت الكهرباء، فلن يُرسل النبض.
    • إذا استغرق السكريبت وقتاً أطول من المعتاد وعلق، ستنتهي مهلة السماح.
    • يرسل Pingzo تنبيهاً فورياً إلى هاتفك عبر واتساب أو تليجرام لإبلاغك بالمشكلة قبل أن تتفاقم.

7. الأسئلة الشائعة حول Cron Jobs (FAQ)

ماذا يعني التعبير */5 * * * *؟

يعني تنفيذ الأمر كل 5 دقائق (عند الدقائق 0، 5، 10، 15، 20، 25، 30، 35، 40، 45، 50، 55 من كل ساعة).

أين يتم حفظ ملفات crontab الخاصة بالمستخدمين في لينكس؟

تُحفظ في المسار /var/spool/cron/crontabs/ (على أنظمة Debian/Ubuntu) أو /var/spool/cron/ (على أنظمة CentOS/RHEL). يُنصح دائماً باستخدام الأمر crontab -e لتعديلها بأمان.

هل يمكن تشغيل Cron Job كل ثانية؟

لا، الحد الأدنى المسموح به في cron التقليدي هو دقيقة واحدة (60 ثانية). إذا كنت بحاجة إلى تكرار بالثواني، يُفضل استخدام Systemd Timers أو نظام جدولة مخصص داخل تطبيقك.

كيف أوقف مهمة cron تعمل حالياً وتستهلك الموارد؟

ابحث عن معرف العملية (PID) باستخدام الأمر pgrep -a -f script-name.sh أو ps aux | grep script-name، ثم قم بإنهائها باستخدام الأمر kill -15 <PID> (أو kill -9 <PID> للإيقاف الإجباري).

كيف أعرف إذا كانت مهام Cron تعمل بنجاح دون أخطاء؟

نظراً لعدم وجود تنبيهات مدمجة في لينكس، فإن أفضل ممارسة هي ربط مهمتك بـ مراقب نبض Pingzo لتصلك رسالة فورية على واتساب إذا فات موعد التنفيذ.


⚡ احمِ خوادمك ومهامك المجدولة اليوم مجاناً

لا تترك النسخ الاحتياطي أو عمليات الدفع تفشل في صمت. ابدأ مراقبة مهام الـ Cron في خادمك مع Pingzo واحصل على تنبيهات فورية وموثوقة على واتساب عند حدوث أي طارئ.

🚀 ابدأ المراقبة مجاناً مع Pingzo (1 مراقب مجاني مشمول) →
🛠️ جرّب أداة إنشاء تعبيرات Cron المجانية →

Zero-Code Uptime Alerts

Stop Finding Out About Outages from Angry Users

Get instant WhatsApp & Discord alerts the second your API, website, or server goes down. Setup in 30 seconds with 60-second checks.

WhatsApp & Discord 60-Second Checks Free Forever Plan
Try Pingzo Free

Know before your users do

Connect official WhatsApp notification channels, Discord webhooks, Telegram bots, and public status pages. Start in 30 seconds.

Create Free Monitor