Lập lịch task với Cron trong Golang
Mở đầu
Cron Job là một chức năng giúp lên lịch tự động thực hiện một số công việc nào đó.
Giúp tự động hoá các tác vụ cơ bản của máy chủ – tính năng nổi bật của Cron Jobs
- Tự động Backup dữ liệu hệ thống định kì
- Tự động gửi email: email định kì cho khách hàng, gửi báo giá hay thông báo các bản tin mới theo thời điểm do khách hàng của bạn tùy chọn, …
- Tự động thực hiện một lệnh nào đó trong Linux do người dùng tạo ra: cập nhật số liệu, quét chỉ mục, cache dữ liệu hệ thống, …
Trong bài viết này tôi sẽ hướng dẫn các bạn có thể tạo một chương trình tự động lên lịch đơn giản và cũng như hiểu được cách vận hành của một chương trình cron job.
Bắt đầu
Trước hết chúng ta cần install package
go get gopkg.in/robfig/cron.v
Import package bằng cách:
import "gopkg.in/robfig/cron.v2"
Tạo một cron job
package main
import (
"fmt"
"gopkg.in/robfig/cron.v2"
"time"
)
func main() {
c := cron.New()
c.AddFunc("0 30 * * * *", func() { fmt.Println("Every hour on the half hour") })
c.AddFunc("TZ=Asia/Bangkok 30 04 * * * *", func() { fmt.Println("Runs at 04:30 Bangkok time every day") })
c.AddFunc("@hourly", func() { fmt.Println("Every hour") })
c.AddFunc("@every 0h0m1s", func() { fmt.Println("Every second") })
c.Start()
// Funcs are invoked in their own goroutine, asynchronously.
// Funcs may also be added to a running Cron
c.AddFunc("@daily", func() { fmt.Println("Every day") })
// Added time to see output
time.Sleep(10 * time.Second)
c.Stop() // Stop the scheduler (does not stop any jobs already running).
}
Trên đây là ví dụ đơn giản để có thể tạo một cron job một cách nhanh chóng.
Như có thể thấy cấu trúc của một cron job gồm có:
-
-
Một crontab file có 5 trường xác định thời gian, cuối cùng là lệnh sẽ được chạy định kỳ.
-
Nếu một cột được gán ký tự *, nó có nghĩa là tác vụ sau đó sẽ được chạy ở mọi giá trị cho cột đó.
-
Ví dụ:
– Chạy script 30 phút 1 lần:
0,30 * * * * command
– Chạy script 15 phút 1 lần:
0,15,30,45 * * * * command
– Chạy script vào 3 giờ sáng mỗi ngày:
0 3 * * * command
Interval
Bạn cũng có thể lên lịch một công việc để thực hiện vào những khoảng thời gian cố định, bắt đầu từ thời điểm nó được thêm vào hoặc chạy cron. Điều này được hỗ trợ bằng cài đặt cron như sau:
@every <duration>
Ví dụ: "@every 1h30m10s" sẽ cho biết lịch biểu sẽ kích hoạt sau 1 giờ, 30 phút, 10 giây và sẽ tiếp tục chạy trong mọi khoảng thời gian sau đó.
package main
import (
"fmt"
"time"
"gopkg.in/robfig/cron.v2"
)
func main() {
c := cron.New()
c.AddFunc("@every 0h0m1s", func() { fmt.Println("Every second") })
c.Start()
// Added time to see output
time.Sleep(10 * time.Second)
c.Stop() // Stop the scheduler (does not stop any jobs already running).
}
Tổng kết
Với hướng dẫn cơ bản trên hi vọng có thể giúp các bạn nhanh chóng cài đặt chương trình tạo cron job trong golang.
Tài liệu tham khảo:
https://godoc.org/gopkg.in/robfig/cron.v2
https://github.com/prprprus/scheduler