1. مقدمه

کتابخانه cron Golang یک ابزار قدرتمند و آسان برای زمان‌بندی اجرای وظایف در زمان‌ها یا فواصل زمانی خاص است. این کتابخانه براساس سرویس cron یونیکس مدل‌گیری شده است اما به عنوان یک کتابخانه مستقل پیاده‌سازی شده است که می‌تواند در برنامه‌های Go یکپارچه شود. کتابخانه cron از زمان‌بندی مبتنی بر زمان مراقبت می‌کند و به شما امکان می‌دهد که بر روی کاری که نیاز به اجرا دارد، تمرکز کنید.

2. مثال

نصب کتابخانه cron

برای شروع استفاده از کتابخانه cron در پروژه خود، ابتدا باید آن را با استفاده از دستور go get نصب کنید:

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

وارد کردن بسته cron

پس از نصب، می‌توانید آن را به برنامه Go خود وارد کنید به این صورت:

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

در زیر مثال ساده‌ای از نحوه تنظیم یک کار cron که یک پیام را هر دقیقه چاپ می‌کند آمده است:

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()
	..
	// توابع به صورت موازی و به صورت ناهمزمان صدا زده می‌شوند.
	...
	// توابع ممکن است به یک cron در حال اجرا اضافه شوند
	c.AddFunc("@daily", func() { fmt.Println("هر روز") })
	..
	..
	c.Stop()  // توقف برنامه‌زمان‌بند (هیچ وظیفه ای که در حال اجرا است را توقف نمی‌کند).
}

3. فرمت عبارت CRON

یک عبارت cron مجموعه‌ای از زمان‌ها را نشان می‌دهد و از ۶ فیلد جدا شده با فاصله استفاده می‌کند.

نام فیلد اجباری؟ مقادیر مجاز کاراکترهای ویژه مجاز
ثانیه‌ها بله 0-59 * / , -
دقیقه‌ها بله 0-59 * / , -
ساعت‌ها بله 0-23 * / , -
روز ماه بله 1-31 * / , - ?
ماه بله 1-12 یا JAN-DEC * / , -
روز هفته بله 0-6 یا SUN-SAT * / , - ?

4. کاراکترهای ویژه در اعبارات CRON

  • ستاره ( * ) ستاره تمامی مقادیر ممکن برای فیلد داده شده را نشان می‌دهد. به عنوان مثال، یک ستاره در فیلد دقیقه به این معنی است که هر دقیقه اجرا می‌شود.
  • کش (/) کاراکتر کش برای تعیین افزایش‌ها استفاده می‌شود. به عنوان مثال، "*/15" در فیلد ثانیه به معنای هر ۱۵ ثانیه از صفر است.
  • ویرگول (, ) کاراکتر ویرگول برای فهرست کردن مقادیر گسسته مورد استفاده قرار می‌گیرد. به عنوان مثال، "MON,WED,FRI" در فیلد روز هفته به این معنی است که وظیفه در دوشنبه، چهارشنبه و جمعه اجرا می‌شود.
  • خط (-) خط یک دامنه از مقادیر را نشان می‌دهد. "9-17" در فیلد ساعت نشان دهنده هر ساعت از ۹ صبح تا ۵ بعدازظهر است.
  • علامت سوال (?) علامت سوال می‌تواند در فیلدهای روز ماه و روز هفته برای نشان دادن 'هیچ مقدار خاص' استفاده شود که وقتی نیاز به تعیین یک مقدار برای یکی و نه دیگری دارید بسیار مفید است.

5. زمانبندی‌های از پیش تعریف شده

توضیحات دقیق درباره زمانبندی‌های از پیش تعریف شده که در جدول نمایش داده شده، عبارات زیر هستند:

تاییدیه توضیحات معادل
@yearly (یا @annually) یکبار در سال، نصف‌شب، اول ژانویه 0 0 0 1 1 *
@monthly یکبار در ماه، نصف‌شب، اول ماه 0 0 0 1 * *
@weekly یکبار در هفته، نصف‌شب بین شنبه و یک‌شنبه 0 0 0 * * 0
@daily (یا @midnight) یکبار در روز، نصف‌شب 0 0 0 * * *
@hourly یکبار در ساعت، آغاز ساعت 0 0 * * * *

6. بازه‌ها و زمان‌بندی‌های ثابت

زمان‌بندی اجرای کارها در بازه‌های ثابت یک ویژگی قدرتمند دیگر از کتابخانه cron می‌باشد. به عنوان مثال، برنامه ریزی یک کاری که هر 2 ساعت یکبار اجرا شود به این صورت است:

c.AddFunc("@every 2h", func() { fmt.Println("کار هر دو ساعت یکبار اجرا می‌شود") })

7. مناطق زمانی و زمان‌بندی کارها

تفسیر و زمان‌بندی در منطقه زمانی محلی دستگاهی انجام می‌شود که برنامه Go در آن اجرا می‌شود. هنگام تغییرات جلوگیری از تغییر زمانهای خورشیدی باید مورد توجه قرار گیرد، زیرا بعضی اوقات ممکن است وجود نداشته باشند یا تکرار شوند.

8. ایمنی رشته و همگام‌سازی

کتابخانه cron برای ایمنی رشته و همروندی طراحی شده است. حایز اهمیت است که فراخواننده ترتیب صحیحی از فراخوانی‌های متد را حفظ کند تا از شرایط رقابتی جلوگیری شود. مکانیسم‌های همگام‌سازی مناسب باید در صورت نیاز استفاده شوند تا اطمینان حاصل شود که کارها به درستی زمان‌بندی و اجرا شوند.