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