Cron이란
우리는 살면서 종종 정해진 시간에 정해진 일이 자동으로 수행되었으면 하는 일들이 많이 있습니다. Go언어에서는 이러한 일을 cron이 해결해 줍니다.
먼저 프로젝트 디렉토리에서 다음 명령어로 모듈을 가져옵니다.
> go get github.com/robfig/cron |
package main
import (
"fmt"
"github.com/robfig/cron"
"time"
)
const (
CronSpec = "30 * * * * *"
)
var (
Data int
)
func PrintData() {
t := time.Now().Format(time.ANSIC)
fmt.Println(t, " : ", Data)
Data++
}
func main() {
c := cron.New()
c.AddFunc(CronSpec, PrintData)
c.Start()
time.Sleep(time.Minute * 10)
c.Stop()
}
/* 출력결과
Tue Jun 15 15:15:30 2021 : 0
Tue Jun 15 15:16:30 2021 : 1
Tue Jun 15 15:17:30 2021 : 2
*/
코드설명
cron.New()를 통하여 cron을 생성하고 AddFunc()를 통해 동작할 시간대와 동작할 함수를 등록합니다. "30 * * * * *"을 cron 시간으로 등록하였습니다. 이것은 출력결과를 보면 알 수 있듯이 매시간 매분 30초 일때 마다 함수가 동작합니다.
Cron Spec 구조
CronSpec을 "30 * * * * *"로 설정하였습니다. 여기서 많이 착가할 수 있는 부분이 30초 마다 동작을 수행하는 것으로 오해할 수 있습니다. 그러나 이것은 매 시간 매분 30초가 되었을 경우 수행하는 것을 의미합니다. 이제 Cron spec에 구조에 대하여 알아보겠습니다.
가장 왼쪽 부터 초, 분, 시, 일, 월, 요일 로 구성되어 있습니다.
Seconds | Minute | Hour | Day of month | Month | Week |
0 ~ 59 | 0 ~ 59 | 0 ~ 23 | 1 ~ 31 | 1 ~ 12 | 0 ~ 6 |
예제
"0 0 0 * * *" : 매일 0시 0분 0초에 수행합니다.
"0 0 0 1 1 *" : 1월 1일 0시 0분 0초에 수행합니다.
Cron Spec에서 사용되는 문자
별표 *
별표는 눈치채셨겠지만 모든 값을 뜻합니다.
콤마 ,
콤마는 해당 spec에 여러개의 값을 설정하는데 사용합니다. "10,20,30 * * * * *" 이렇게 설정을 한다면 매시 매분 10초, 20초, 30초 일때 수행합니다.
마이너스 -
마이너스는 값의 범위를 지정합니다. "10-15 * * * * *"일 경우 매시 매분 10초 11초 12초 13초 14초 15초 에 수행합니다.
슬래쉬 /
슬래쉬의 경우 해당 범위에서 수행하는 간격을 의미 합니다. "10-50/5 * * * * *" 일 경우 매시 매분에서 10초에서 50초 사이에 5초에 한번씩 수행합니다.
'Go언어' 카테고리의 다른 글
go work 사용해보기 (0) | 2023.07.06 |
---|---|
Ubuntu(Linux)에서 Go 재설치 (0) | 2022.10.30 |
Go언어 interface reflect (0) | 2021.08.15 |
Prometheus Go언어 Metric label (0) | 2021.06.14 |
Prometheus Go언어 Metric 생성 (0) | 2021.06.13 |