DEV Community

Cover image for Membuat Penjadwalan Otomatis (Cron Job Scheduler) menggunakan Golang
Benita Clarissa
Benita Clarissa

Posted on

Membuat Penjadwalan Otomatis (Cron Job Scheduler) menggunakan Golang

Terkadang dalam sebuah aplikasi, ada tugas-tugas yang perlu dijalankan otomatis sesuai jadwal yang telah ditentukan. Contohnya, ketika kita menerima email otomatis yang berisi ucapan tahun baru, notifikasi agenda setiap hari kerja jam 8 pagi, tagihan setiap bulan tanggal 10 jam 9 pagi, cek pesanan baru setiap 10 menit, dan lainnya. Artikel ini akan membahas bagaimana cara membuat penjadwalan otomatis menggunakan golang.

Bagaimana penjadwalan otomatis dilakukan pada server?

Pada artikel ini, penjadwalan otomatis akan dilakukan pada server berbasis Linux dengan menggunakan cron. Cron adalah sebuah command Linux untuk menjalankan script secara terjadwal.

Di bawah ini adalah cara mengatur penjadwalan pada crontab.

* * * * * perintah yang akan dieksekusi
– – – – –
| | | | |
| | | | +—– day of week (0 – 7) (Sunday=0)
| | | +——- month (1 – 12)
| | +——— day of month (1 – 31)
| +———– hour (0 – 23)
+————- min (0 – 59)
Enter fullscreen mode Exit fullscreen mode

Contoh:

  1. Email otomatis untuk ucapan tahun baru jam 12 malam
    0 0 1 1 * /home/user/automail-new-year.sh

  2. Email otomatis tagihan setiap bulan tanggal 10 jam 7 pagi
    0 07 10 * * /home/user/automail-billing.sh

  3. Notifikasi agenda setiap hari kerja (Senin-Jumat) jam 9 pagi
    0 09 * * 1-5 /home/user/notification-daily-agenda.sh

  4. Notifikasi pesanan baru setiap 10 menit sekali
    */10 * * * * /home/user/notification-new-order.sh

Ya, saya sudah memahami cron. Bagaimana cara implementasi pada Go?

Setelah melakukan pencarian terhadap beberapa package go terkait scheduler, saya memilih package robfig/cron v3. Cara implementasinya cukup sederhana. Mari kita lihat bersama.

package main

import (
   "fmt"
   "os"
   "os/signal"
   "syscall"
   "time"

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

func main() {
   // set scheduler berdasarkan zona waktu sesuai kebutuhan
   jakartaTime, _ := time.LoadLocation("Asia/Jakarta") 
   scheduler := cron.New(cron.WithLocation(jakartaTime))

   // stop scheduler tepat sebelum fungsi berakhir
   defer scheduler.Stop()

   // set task yang akan dijalankan scheduler
   // gunakan crontab string untuk mengatur jadwal
   scheduler.AddFunc("0 0 1 1 *", func() { SendAutomail("New Year") })
   scheduler.AddFunc("0 07 10 * *", SendMonthlyBillingAutomail)
   scheduler.AddFunc("0 09 * * 1-5", NotifyDailyAgenda)
   scheduler.AddFunc("*/10 * * * *", NotifyNewOrder)

   // start scheduler
   go scheduler.Start()

   // trap SIGINT untuk trigger shutdown.
   sig := make(chan os.Signal, 1)
   signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
   <-sig
}

func SendAutomail(automailType string) {
    // ... instruksi untuk mengirim automail berdasarkan automailType
    fmt.Printf(time.Now().Format("2006-01-02 15:04:05") + " SendAutomail " + automailType + " telah dijalankan.\n")
}

func SendMonthlyBillingAutomail(){
    // ... instruksi untuk mengirim automail berisi tagihan
    fmt.Printf(time.Now().Format("2006-01-02 15:04:05") + " SendMonthlyBillingAutomail telah dijalankan.\n")
}

func NotifyDailyAgenda(){
    // ... instruksi untuk mengirim notifikasi agenda harian
    fmt.Printf(time.Now().Format("2006-01-02 15:04:05") + " NotifyDailyAgenda telah dijalankan.\n")
}

func NotifyNewOrder(){
    // ... instruksi untuk mengecek pesanan baru, lalu mengirimkan notifikasi
    fmt.Printf(time.Now().Format("2006-01-02 15:04:05") + " NotifyNewOrder telah dijalankan.\n")
}

Enter fullscreen mode Exit fullscreen mode

Setelah itu, kita jalankan function Main.

go run main.go
Enter fullscreen mode Exit fullscreen mode

Lalu, amati hasilnya.

2021-09-16 09:00:00 NotifyDailyAgenda telah dijalankan.
2021-09-16 12:30:00 NotifyNewOrder telah dijalankan.
2021-09-16 12:40:00 NotifyNewOrder telah dijalankan.
Enter fullscreen mode Exit fullscreen mode

Penjadwalan otomatis dengan golang sudah berhasil dibuat.

Selanjutnya

Berikut beberapa link yang dapat dijadikan referensi.

  • Dokumentasi lengkap package robfig/cron dapat dilihat dari link tersebut.
  • Gunakan crontab.guru untuk mengatur crontab dan memastikan waktu penjadwalan sudah sesuai dengan kebutuhan.

Discussion (0)