hoony's web study

728x90
반응형

Go Cron 이 아무리 좋아도 역시 한개가 있는 것 같습니다. 
어떤 상황이냐면 부모 프로세스가 끝나고 다음것을 실행을 하고 싶은 경우가 생겼답니다. 
부모 프로세스가 언제 끝날지를 모르고 그리고 스케쥴을 걸어도 스케쥴이 중복되는 경우가 발생이 하는 경우입니다. 
이럴때 사용한 방법입니다. 


프로세스에 Tag를 달아서 확인해보자 

첫 번째 시작은 process에  tag를 다는 것입니다. 
https://pkg.go.dev/github.com/go-co-op/gocron@v1.17.0#Scheduler.Tag

 

gocron package - github.com/go-co-op/gocron - Go Packages

gocron: A Golang Job Scheduling Package. gocron is a job scheduling package which lets you run Go functions at pre-determined intervals using a simple, human-friendly syntax. gocron is a Golang scheduler implementation similar to the Ruby module clockwork

pkg.go.dev

위의 사이트는 참고 사이트입니다. 
Tag를 다는 방법은 아래와 같습니다. 

loc, _ := time.LoadLocation("Asia/Seoul")
	scheduler := gocron.NewScheduler(loc) 
	_, _ = scheduler.Every(40).Minutes().Tag("FirstJob").WaitForSchedule().Do(job 명, scheduler)

어떤 시간을 기준으로 할것인지를 하기 위해서 timezone도 서울로 지정을 했습니다. 
현재 다국어 버전도 준비를 하고 있어서 향후에는 GMT 기준으로 수정할 가능성도 있어요. 
위의 참고 소스를 보시면 정말 간단하죠? 


프로세스가 돌고 있는지 확인하는 방법

secondJobs, _ := s.FindJobsByTag("SecondJob")

	secondJob := secondJobs[0]

	if secondJob.IsRunning() {
		zaplogger.Info(fmt.Sprintf("%v", time.Now()) + " :Task명 ")
		zaplogger.Info("이미 두번째 작업이 수행중입니다. 과도한 API 호출을 방지하기 위해 이번 작업은 진행하지 않습니다.")
	} else if !secondJob.IsRunning() {
		zaplogger.Info(fmt.Sprintf("%v", time.Now()) + " : 실행해야할 Task명")
		zaplogger.Info("작업을 수행합니다... !!!!")
		Job 실행 
	}

Tag를 이용해서 process가 구동중인지 아닌지를 판별해서 다음 job을 실행시키는 방법입니다. 

반응형

 

728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading