0Pricing
Go Academy · درس

مكتبة robfig/cron

جدوِل المهام باستخدام صيغة cron

مكتبة robfig/cron درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

تعبيرات Cron في Go

تتيح لك مكتبة robfig/cron جدولة المهام باستخدام صيغة cron المألوفة بدلًا من كتابة حسابات الوقت يدويًا. ثبّتها باستخدام go get github.com/robfig/cron/v3.

import "github.com/robfig/cron/v3"

مراجعة صيغة Cron

يتكون تعبير cron القياسي من خمسة حقول:

  • الدقيقة (0-59)
  • الساعة (0-23)
  • يوم الشهر (1-31)
  • الشهر (1-12)
  • يوم الأسبوع (0-6)

مثال: 0 9 * * 1-5 = الساعة 9:00 صباحًا في أيام الأسبوع.

إنشاء Scheduler

تعيد cron.New() مجدولًا. أضف المهام إليه، ثم شغّله.

c := cron.New()
c.Start()
defer c.Stop()

إضافة مهمة

تسجّل AddFunc دالة لتشغيلها وفق جدول زمني، وتعيد معرّف إدخال وخطأً إذا كانت المواصفة غير صالحة.

id, err := c.AddFunc("30 * * * *", func() {
    fmt.Println("runs at minute 30")
})
if err != nil {
    log.Fatal(err)
}
_ = id

حقل الثواني

تستخدم robfig/cron v3 مواصفة من خمسة حقول افتراضيًا (من دون ثوانٍ). ولتمكين مواصفة من ستة حقول تتضمن الثواني، أنشئ cron مع خيار الثواني.

c := cron.New(cron.WithSeconds())
c.AddFunc("*/5 * * * * *", func() { fmt.Println("every 5s") })

الجداول الزمنية المحددة مسبقًا

تتوفر وحدات ماكرو مريحة:

  • @hourly
  • @daily
  • @weekly
  • @every 1h30m
c.AddFunc("@every 1h30m", func() { fmt.Println("every 90 min") })
c.AddFunc("@daily", func() { fmt.Println("midnight") })

إزالة المهام

استخدم EntryID المُعاد لإزالة مهمة ديناميكيًا.

id, _ := c.AddFunc("@hourly", task)
// later:
c.Remove(id)

تعمل المهام ضمن Goroutines

تعمل كل مهمة مجدولة ضمن goroutine خاص بها. إذا كان من الممكن أن تتداخل مهمة مع تشغيلها التالي، فعليك الحماية من التزامن أو استخدام غلاف يتخطى عمليات التشغيل المتداخلة.

المناطق الزمنية

تستخدم الجداول الزمنية، افتراضيًا، التوقيت المحلي للجهاز. مرّر موقعًا جغرافيًا لجعلها صريحة وتجنب المفاجآت الناتجة عن التوقيت الصيفي.

loc, _ := time.LoadLocation("America/New_York")
c := cron.New(cron.WithLocation(loc))

التحليل دون تشغيل

يمكنك التحقق من صحة المواصفة أو حساب التشغيل التالي باستخدام محلّل، وهذا مفيد جدًا للاختبارات ولعرض وقت التنفيذ التالي للمستخدمين.

sched, _ := cron.ParseStandard("0 9 * * 1-5")
next := sched.Next(time.Now())
fmt.Println("next run:", next)

قابل للتشغيل: حساب تشغيل Cron التالي (بالتشبيه)

إن robfig/cron مكتبة خارجية؛ يحاكي هذا المقتطف من المكتبة القياسية أبسط قاعدة لـ cron، وهي «كل دقيقة عند بداية الدقيقة»، وذلك بحساب الوقت المطابق التالي.

package main

import (
    "fmt"
    "time"
)

func nextRun(from time.Time) time.Time {
    return from.Truncate(time.Minute).Add(time.Minute)
}

func main() {
    now := time.Date(2026, 1, 1, 8, 15, 30, 0, time.UTC)
    fmt.Println("now:", now.Format("15:04:05"))
    fmt.Println("next:", nextRun(now).Format("15:04:05"))
}

تحقق سريع

اختبر مدى فهمك لمكتبة robfig/cron.

مراجعة

لقد تعلمت استخدام مكتبة robfig/cron:

  • cron.New() + AddFunc(spec, fn) + Start()
  • تتكون المواصفة افتراضيًا من 5 حقول؛ وتضيف WithSeconds حقلًا للثواني
  • تُبسّط وحدات الماكرو مثل @daily و@every الجداول الشائعة
  • استخدم Remove والمواقع الجغرافية وParseStandard للتحكم والاختبار

الأسئلة الشائعة

هل درس «مكتبة robfig/cron» مجاني؟

نعم — نص درس «مكتبة robfig/cron» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «مكتبة robfig/cron»؟

جدوِل المهام باستخدام صيغة cron تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «مكتبة robfig/cron»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الجدولة المستندة إلى الوقت
  2. مكتبة robfig/cron
  3. Tickers للفواصل الزمنية
  4. إيقاف المهام بسلاسة
← العودة إلى Go Academy