1. تعارف

Golang cron لائبریری ایک طاقتور اور آسان استعمال کے آلے ہے جو مخصوص وقت یا وقفے پر جابز کا اجراء کرنے کی اجازت دیتا ہے۔ یہ UNIX کرون سروس کی تصویر ہے لیکن یہ ایک الگ لائبریری کے طور پر پیش کی جاتی ہے جو گو ایپلیکیشن میں شامل کی جاسکتی ہے۔ کرون لائبریری وقت کی بنیاد پر شیڈولنگ کا خیال رکھتی ہے، جس کی بنا پر آپ کو صرف جابز پر توجہ دینے کی ضرورت ہوتی ہے۔

2. مثال

کرون لائبریری کا انسٹال کرنا

کرون لائبریری کو اپنے پروجیکٹ میں شامل کرنے کے لئے، آپ کو پہلے go get کمانڈ کا استعمال کرکے اسے انسٹال کرنا ہوگا:

go get github.com/robfig/cron/[email protected]

کرون پیکیج شامل کرنا

انسٹال کرنے کے بعد، آپ اسے اپنے گو پروگرام میں منتقل کرسکتے ہیں:

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

یہاں ایک سادہ مثال دی گئی ہے کہ کیسے ایک کرون جاب کو تشکیل دی جاتی ہے جو ہر منٹ ایک پیغام پرنٹ کرتا ہے:

package main

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

func main() {
	c := cron.New()
	c.AddFunc("0 30 * * * *", func() { fmt.Println("ہر گھنٹے کی ادھر ہو  روز کا پیغام") })
	c.AddFunc("@hourly",      func() { fmt.Println("ہر گھنٹے") })
	c.AddFunc("@every 1h30m", func() { fmt.Println("ہر ایک گھنٹے اور تیس منٹ") })
	c.Start()
	.. 
	// فنکشنز خود مخصوص گوروٹین میں بلا وقت چلائے جاتے ہیں۔
	...
	// فنکشنز کو چلانے کیلئے ایک چلتے وقت کرون میں شامل کیا جا سکتا ہے
	c.AddFunc("@daily", func() { fmt.Println("ہر دن") })
	..
	..
	c.Stop()  // شیڈولر کو روکنا (جوبز جو چل رہی ہوں وہ روکنے کیلئے نہیں ہے)
}

3. کرون ایکسپریشن فارمیٹ

ایک کرون ایکسپریشن ایک سیٹ کا وقت کا اندازہ کرتی ہے، 6 خالی الگ-الگ فیلڈ کا استعمال کرکے۔

فیلڈ نام ضروری ہے؟ مجاز قیمتیں مجاز خصوصی علامات
سیکنڈز ہاں 0-59 * / , -
منٹس ہاں 0-59 * / , -
گھنٹے ہاں 0-23 * / , -
دن مہینے ہاں 1-31 * / , - ?
مہینے ہاں 1-12 یا جنوری-دسمبر * / , -
دن ہفتے ہاں 0-6 یا اتوار-ہفتہ * / , - ?

4. کرون ایکسپریشن میں خصوصی علامات

  • ستارہ ( * ) ستارہ دی گئی فیلڈ کے لیے تمام ممکن قیمتوں کو ظاہر کرتی ہے۔ مثال کے طور پر، منٹس کے فیلڈ میں ستارہ ہر منٹ کو ظاہر کرتی ہے۔
  • سلاش ( / ) سلاش علامت اضافے کی مقرر کرنے کے لئے استعمال ہوتی ہے۔ مثال کے طور پر، سیکنڈز کے فیلڈ میں "*/15" صفر سے شروع ہوکر ہر 15 سیکنڈ کو ظاہر کرتی ہے۔
  • کاما ( , ) کاما علامت مختلف علیحدہ قیمتوں کو فہرست بنانے کے لئے استعمال ہوتی ہے۔ مثلاً، دن-آف-ویک فیلڈ میں "MON,WED,FRI" یہ دکھاتا ہے کہ جاب منگل، بدھ، اور جمعہ کو چلے گی۔
  • ہائفن ( - ) ہائفن قیمتوں کا رینج ظاہر کرتا ہے۔ گھنٹے فیلڈ میں "9-17" ہر 9 صبح سے 5 بجے شام کو ہر گھنٹے کو ظاہر کرتا ہے۔
  • سوالیہ ( ? ) سوالیہ دن-مہینے اور دن-ہفتے فیلڈ میں استعمال کی جاتی ہے تاکہ 'کوئی خاص قیمت' کو ظاہر کرے۔ یہ کارآمد ہوتا ہے جب آپ کو ایک فیلڈ کے لئے قیمت مقرر کرنی ہو اور دوسرے کے لئے نہیں۔

5. تعین شدہ شیڈولز

موجودہ ٹیبل فارمیٹ میں دستیاب تعین شدہ شیڈولز کی تفصیلات کی وضاحت:

انٹری تفصیلات مساوی ہش بِت
@yearly (یا @annually) ایک بار ایک سال، صاف میں، جنوری 1 0 0 0 1 1 *
@monthly ایک بار ایک مہینے، صاف میں، مہینے کے پہلے دن 0 0 0 1 * *
@weekly ایک بار ایک ہفتے، صاف میں، ہفتے کے سنہری بھلے کے بیچ 0 0 0 * * 0
@daily (یا @midnight) ایک بار ایک دن، صاف میں، صاف 0 0 0 * * *`
@hourly ایک بار ایک گھنٹے، گھنٹے کے آغاز سے 0 0 * * * *

6. وقفے اور مقررہ وقفوں کی ترتیب

کران لائبریری کی ایک اور طاقتور خصوصیت ہے کہ کسی بھی تعین شدہ وقفے پر کاموں کی تشہیر کرنا۔ مثلاً، اگر کسی کام کو ہر دو گھنٹے کے بعد چلانے کا انتظام کرنا ہو:

c.AddFunc("@every 2h", func() { fmt.Println("Job runs every two hours") })

7. وقت کے علاقے اور کام کی ترتیب

تشریح اور ترتیب وقت کے منطقی علاقے پر مشین کی مقامی وقت میں کی جاتی ہے جہاں Go ایپلیکیشن چل رہی ہو۔ دھیان رہے کہ دنیا کے بدلنے کے وقت میں خصوصی تحفظ کرنا چاہئے کیونکہ کچھ اوقات موجود نہیں ہوتے یا دہرائے جاتے ہیں۔

8. تھریڈ محفوظی اور ہم آہنگی

کران لائبریری کا تصمیم ہے کہ یہ تھریڈ-محفوظ اور ہم آہنگ ہو۔ بلکہ، ماننا ضروری ہے کہ کالر کو میثاق کے درست ترتیب کو برقرار رکھنے کے لیے میثاق کی درست ترتیب کی ندرت کرنی ہوتی ہے۔ جب ضرورت ہو تو مناسب ہم آہنگی آلات کا استعمال کرنا ضروری ہے تاکہ کام درست وقت پر تشہیر کیا جا سکے۔