1. Pengenalan

Pustaka cron Golang adalah alat yang kuat dan mudah digunakan yang memungkinkan penjadwalan pekerjaan untuk berjalan pada waktu atau interval tertentu. Pustaka ini dibuat menurut layanan cron UNIX tetapi diimplementasikan sebagai pustaka mandiri yang dapat diintegrasi ke dalam aplikasi Go. Pustaka cron mengurus penjadwalan berbasis waktu, sehingga Anda dapat fokus pada pekerjaan yang perlu dieksekusi.

2. Contoh

Menginstal pustaka cron

Untuk mulai menggunakan pustaka cron dalam proyek Anda, Anda perlu menginstalnya dengan menggunakan perintah go get:

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

Impor paket cron

Setelah menginstal, Anda dapat mengimpornya ke dalam program Go Anda seperti berikut:

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

Berikut adalah contoh sederhana cara menyiapkan pekerjaan Cron yang mencetak pesan setiap menit:

package main

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

func main() {
	c := cron.New()
	c.AddFunc("0 30 * * * *", func() { fmt.Println("Setiap jam di setengah jam") })
	c.AddFunc("@hourly",      func() { fmt.Println("Setiap jam") })
	c.AddFunc("@every 1h30m", func() { fmt.Println("Setiap satu jam tiga puluh") })
	c.Start()
	..
	// Funcs dijalankan dalam goroutine mereka sendiri, secara asinkron.
	...
	// Funcs juga dapat ditambahkan ke Cron yang sedang berjalan
	c.AddFunc("@daily", func() { fmt.Println("Setiap hari") })
	..
	..
	c.Stop()  // Menghentikan penjadwal (tidak menghentikan pekerjaan yang sudah berjalan).
}

3. Format Ekspresi CRON

Ekspresi cron mewakili serangkaian waktu, menggunakan 6 bidang yang dipisahkan oleh spasi.

Nama Bidang Wajib? Nilai Diperbolehkan Karakter Khusus yang Diperbolehkan
Detik Ya 0-59 * / , -
Menit Ya 0-59 * / , -
Jam Ya 0-23 * / , -
Hari dalam bulan Ya 1-31 * / , - ?
Bulan Ya 1-12 atau JAN-DEC * / , -
Hari dalam seminggu Ya 0-6 atau SUN-SAT * / , - ?

4. Karakter Khusus dalam Ekspresi CRON

  • Asterisk ( * ) Asterisk mewakili semua nilai yang mungkin untuk bidang yang diberikan. Sebagai contoh, asterisk dalam bidang menit menandakan setiap menit.
  • Slash ( / ) Karakter slash digunakan untuk menentukan peningkatan. Sebagai contoh, "*/15" dalam bidang detik berarti setiap 15 detik dimulai dari nol.
  • Koma ( , ) Karakter koma digunakan untuk membuat daftar nilai diskrit. Misalnya, "SEN,RAB,JUM" dalam bidang hari dalam seminggu berarti pekerjaan akan berjalan pada hari Senin, Rabu, dan Jumat.
  • Strip ( - ) Strip menunjukkan rentang nilai. "9-17" dalam bidang jam menunjukkan setiap jam dari jam 9 pagi hingga jam 5 sore.
  • Tanda tanya ( ? ) Tanda tanya dapat digunakan dalam bidang hari dalam bulan dan hari dalam seminggu untuk menandakan 'tidak ada nilai spesifik', yang berguna saat Anda perlu menentukan nilai untuk salah satunya dan bukan yang lain.

5. Jadwal Predefined

Penjelasan detail jadwal pre-defined yang tersedia, ditampilkan dalam format tabel:

Entri Deskripsi Setara Dengan
@yearly (atau @annually) Berjalan sekali setahun, tengah malam, 1 Januari 0 0 0 1 1 *
@monthly Berjalan sekali sebulan, tengah malam, awal bulan 0 0 0 1 * *
@weekly Berjalan sekali seminggu, tengah malam antara Sab/Ahad 0 0 0 * * 0
@daily (atau @midnight) Berjalan sekali sehari, tengah malam 0 0 0 * * *
@hourly Berjalan sekali sejam, awal jam 0 0 * * * *

6. Interval dan Penjadwalan Interval Tetap

Penjadwalan pekerjaan untuk dieksekusi pada interval tetap adalah fitur kuat lainnya dari pustaka cron. Sebagai contoh, untuk menjadwalkan pekerjaan yang berjalan setiap 2 jam:

c.AddFunc("@every 2h", func() { fmt.Println("Pekerjaan berjalan setiap dua jam") })

7. Zona Waktu dan Penjadwalan Pekerjaan

Interpretasi dan penjadwalan dilakukan dalam zona waktu lokal mesin tempat aplikasi Go berjalan. Perhatian harus diberikan selama perubahan waktu penyesuaian musim panas, karena beberapa waktu mungkin tidak ada atau diulang.

8. Keamanan Benang dan Sinkronisasi

Pustaka cron dirancang agar aman dalam penggunaan benang dan konkuren. Sangat penting bagi pemanggil untuk mempertahankan urutan pemanggilan metode yang benar untuk menghindari kondisi perlombaan. Mekanisme sinkronisasi yang tepat harus digunakan bila diperlukan untuk memastikan pekerjaan dijadwalkan dan dieksekusi dengan benar.