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.