Go (Golang) में कार्य अनुसूचक: cron, gocron और robfig/cron

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go (Golang) में कार्य अनुसूचक: cron, gocron और robfig/cron



कार्य अनुसूचक (task scheduler) अनुप्रयोगों में आवधिक संचालन को स्वचालित करने के लिए एक अपरिहार्य उपकरण है: कैश सफाई और सूचनाएं भेजने से लेकर पृष्ठभूमि डेटा प्रोसेसर चलाने तक। Go (Golang) पारिस्थितिकी तंत्र में cron-जैसा व्यवहार लागू करने के लिए कई लोकप्रिय पुस्तकालय मौजूद हैं। इस लेख में हम तीन मुख्य दृष्टिकोणों पर विचार करेंगे: अंतर्निहित पैकेज cron, हल्का gocron और वास्तविक मानक robfig/cron।



1. अंतर्निहित पैकेज cron (प्रायोगिक)



Go 1.19 से शुरू करके, मानक पुस्तकालय में golang.org/x/exp/cron में एक प्रायोगिक पैकेज cron जोड़ा गया है। यह शेड्यूल के अनुसार कार्य चलाने के लिए बुनियादी कार्यक्षमता प्रदान करता है। हालांकि, सीमित कार्यक्षमता और जटिल cron-अभिव्यक्तियों (जैसे, सेकंड के साथ) के समर्थन की कमी के कारण व्यवहार में इसका उपयोग शायद ही कभी किया जाता है।



package main

import ( "context" "fmt" "golang.org/x/exp/cron" "time")

func main() { sched := cron.New() // हर 10 सेकंड में चलाएँ sched.Add("*/10 * * * * *", func() { fmt.Println("कार्य पूर्ण हुआ:", time.Now()) }) sched.Start() time.Sleep(30 * time.Second) sched.Stop()}


2. पुस्तकालय robfig/cron — स्वर्ण मानक



पुस्तकालय github.com/robfig/cron/v3 Go में कार्य अनुसूचक का सबसे लोकप्रिय और परिपक्व कार्यान्वयन है। यह समर्थन करता है:

  • मानक cron-अभिव्यक्तियाँ (5 फ़ील्ड) वैकल्पिक सेकंड फ़ील्ड के साथ
  • पूर्वनिर्धारित शेड्यूल: @yearly, @monthly, @weekly, @daily, @hourly
  • अंतराल: @every 5m (हर 5 मिनट)
  • समय क्षेत्र (timezone)
  • रिकवरी लॉगर के माध्यम से पैनिक हैंडलिंग
  • Logger इंटरफ़ेस के माध्यम से लचीली लॉगिंग प्रणाली


स्थापना

go get github.com/robfig/cron/v3


मूल उदाहरण

package main

import ( "fmt" "github.com/robfig/cron/v3" "time")

func main() { c := cron.New(cron.WithSeconds()) // सेकंड समर्थन सक्षम करें

// हर मिनट 30 सेकंड पर c.AddFunc("30 * * * * *", func() { fmt.Println("हर मिनट 30 सेकंड पर:", time.Now().Format("15:04:05")) })

// हर दिन सुबह 8:00 बजे c.AddFunc("0 0 8 * * *", func() { fmt.Println("प्रतिदिन सुबह 8:00 बजे") })

// हर 2 घंटे में c.AddFunc("@every 2h", func() { fmt.Println("हर 2 घंटे में") })

// सोमवार को सुबह 9:30 बजे c.AddFunc("30 9 * * 1", func() { fmt.Println("प्रत्येक सोमवार सुबह 9:30 बजे") })

c.Start() defer c.Stop()

// निष्पादन देखने के लिए 1 मिनट प्रतीक्षा करें time.Sleep(70 * time.Second)}


robfig/cron में cron-अभिव्यक्ति सिंटैक्स

मानक अभिव्यक्ति में 5 फ़ील्ड (मिनट, घंटे, महीने का दिन, महीना, सप्ताह का दिन) होते हैं। cron.WithSeconds() विकल्प सक्षम करने पर छठा फ़ील्ड — सेकंड (0-59) जुड़ जाता है।

  • * — कोई भी मान
  • */5 — हर 5 इकाई
  • 1,15,30 — विशिष्ट मान
  • 1-10 — श्रेणी
  • L — अंतिम (उदाहरण के लिए, महीने का अंतिम दिन)


3. पुस्तकालय gocron — सरलता और पठनीयता



github.com/go-co-op/gocron शेड्यूल बनाने के लिए एक उच्च-स्तरीय, fluent-इंटरफ़ेस प्रदान करता है। यह आदर्श है यदि आपको जटिल cron-अभिव्यक्तियों की आवश्यकता नहीं है, बल्कि सरल अंतराल पर्याप्त हैं।



स्थापना

go get github.com/go-co-op/gocron/v2


उपयोग उदाहरण

package main

import ( "fmt

अनुशंसाएँ