1. Giriş
Golang cron kütüphanesi, belirli zamanlarda veya aralıklarda işleri zamanlamak için kullanılan güçlü ve kullanımı kolay bir araçtır. UNIX cron servisine model alınmış olup Go uygulamalarına entegre edilebilen bağımsız bir kütüphane olarak uygulanmıştır. Cron kütüphanesi zaman tabanlı zamanlamayı ele alırken, sizin işinizi yürütmenize odaklanmanızı sağlar.
2. Örnek
cron kütüphanesini yüklemek
Projede cron kütüphanesini kullanmaya başlamak için ilk olarak go get
komutunu kullanarak onu yüklemeniz gerekmektedir:
go get github.com/robfig/cron/[email protected]
cron paketini içe aktarın
Yükledikten sonra, onu Go programınıza şu şekilde içe aktarabilirsiniz:
import "github.com/robfig/cron/v3"
İşte her dakika bir mesaj yazdıran bir Cron işinin nasıl kurulacağına dair basit bir örnek:
package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
func main() {
c := cron.New()
c.AddFunc("0 30 * * * *", func() { fmt.Println("Her saat yarım saatte bir") })
c.AddFunc("@hourly", func() { fmt.Println("Her saat") })
c.AddFunc("@every 1h30m", func() { fmt.Println("Her saat otuz") })
c.Start()
..
// Funcs kendi goroutine'larında, asenkron olarak çağrılır.
...
// Funcs ayrıca çalışan bir Cron'a eklenebilir
c.AddFunc("@daily", func() { fmt.Println("Her gün") })
..
..
c.Stop() // Zamanlayıcıyı durdur (zaten çalışan herhangi bir işi durdurmaz).
}
3. CRON İfade Biçimi
Bir cron ifadesi, 6 boşlukla ayrılmış alan kullanarak bir zaman setini temsil eder.
Alan adı | Zorunlu mu? | İzin verilen değerler | İzin verilen özel karakterler |
---|---|---|---|
Saniye | Evet | 0-59 | * / , - |
Dakika | Evet | 0-59 | * / , - |
Saat | Evet | 0-23 | * / , - |
Ayın günü | Evet | 1-31 | * / , - ? |
Ay | Evet | 1-12 veya OCA-ARA | * / , - |
Haftanın günü | Evet | 0-6 veya PAZ-CMT | * / , - ? |
4. CRON İfadelerindeki Özel Karakterler
- Yıldız ( * ) Yıldız, verilen alandaki tüm olası değerleri temsil eder. Örneğin, dakika alanındaki bir yıldız her dakikayı ifade eder.
- Eğik Çizgi ( / ) Eğik çizgi karakteri artışları belirtmek için kullanılır. Örneğin, saniye alanında "*/15" sıfırdan başlayarak her 15 saniyede bir anlamına gelir.
- Virgül ( , ) Virgül karakteri birden fazla ayrık değeri listelemek için kullanılır. Örneğin, haftanın günü alanında "PAZ,ÇAR,PER" ifadesi işin Pazartesi, Çarşamba ve Perşembe günleri çalışacağını belirtir.
- Tire ( - ) Tire değer aralığını belirtir. Saatler alanında "9-17" ifadesi 9'dan 17'ye kadar her saat anlamına gelir.
- Soru işareti ( ? ) Soru işareti, ayın günü ve haftanın günü alanlarında 'belirli bir değer yok' anlamını taşımak için kullanılabilir, bu özellikle biri için belirli bir değer belirtmeniz gerektiğinde diğerinin belirli bir değere ihtiyacı olmadığında kullanışlıdır.
5. Önceden Tanımlanmış Zamanlamalar
Mevcut önceden tanımlanmış zamanlamaların detaylı açıklaması, bir tablo formatında sunulmuştur:
Giriş | Açıklama | Eşdeğeri |
---|---|---|
@yearly (veya @annually) | Yılda bir kez, gece yarısı, 1 Ocak | 0 0 0 1 1 * |
@monthly | Ayda bir kez, gece yarısı, ayın ilk günü | 0 0 0 1 * * |
@weekly | Haftada bir kez, Cumartesi/Pazar arasında gece yarısı | 0 0 0 * * 0 |
@daily (veya @midnight) | Günde bir kez, gece yarısı | 0 0 0 * * * |
@hourly | Saat başı bir kez, saat başı | 0 0 * * * * |
6. Aralıklar ve Sabit Aralıklı Zamanlama
İşleri sabit aralıklarla çalıştırmak, cron kütüphanesinin diğer güçlü bir özelliğidir. Örneğin, her 2 saatte bir çalışacak bir işi zamanlamak için:
c.AddFunc("@every 2h", func() { fmt.Println("İş her iki saatte bir çalışır") })
7. Zaman Dilimleri ve İş Zamanlama
Yorumlama ve zamanlama, Go uygulamasının çalıştığı makinenin yerel saat diliminde yapılır. Yaz saati uygulaması değişikliklerinde dikkatli olunmalıdır, çünkü belirli zamanlar mevcut olmayabilir veya tekrarlanabilir.
8. İş Parçacığı Güvenliği ve Senkronizasyon
Cron kütüphanesi, iş parçacığı güvenli ve eşzamanlı olacak şekilde tasarlanmıştır. Yarış koşullarını önlemek için yöntem çağrılarının doğru sıralamasının korunması, çağrıcı için hayati önem taşır. İşlerin doğru bir şekilde zamanlanması ve yürütülmesini sağlamak için gerektiğinde uygun senkronizasyon mekanizmaları kullanılmalıdır.