안녕하세요
GCP cron: 특정 api로 요청 보내 작업 예약실행하기 본문
1. cron이란 무엇인가?
Cron은 유닉스 계열 운영체제에서 주기적으로 작업을 실행하기 위해 사용되는 시간 기반 스케줄러입니다.
Cron은 주기적으로 수행되어야 하는 작업이 있을 때 유용합니다.
특히, 서버에서 실행되는 백그라운드 작업이나 데이터 처리 작업 등의 작업을 주기적으로 수행하고 싶을 때 사용할 수 있습니다.
또한, Cron을 사용하면 시스템 리소스를 효율적으로 사용할 수 있습니다.
예를 들어, 백업 작업은 데이터베이스나 파일 시스템에 부하를 주는 작업이므로,
사용자가 적은 시간에 백업 작업을 실행하여 서버 부하를 최소화할 수 있습니다.
2. cron.yaml 사용 예시
cron:
- description: "daily summary job"
url: /tasks/summary
schedule: every 24 hours
- description: "monday morning mailout"
url: /mail/weekly
schedule: every monday 09:00
timezone: Australia/NSW
- description: "new daily summary job"
url: /tasks/summary
schedule: every 24 hours
target: beta
=> description은 개발자가 이해하기 쉽도록 작성하는 작업 이름입니다.
1. /tasks/summary api로 24시간마다 GET 요청을 보냅니다.
2. /mail/weekly api로 매주 월요일 09시에 GET 요청을 보냅니다. 시간대는 NSW 기준입니다.
3. /tasks/summary로 24시간마다 GET 요청을 보내는데, beta 버전으로 라우팅합니다.
3. 직접 작성한 cron.yaml 코드 예시
cron:
- description: "Update new channels"
url: /cron/update/new-channels
schedule: every 12 hours
retry_parameters:
job_retry_limit: 2
min_backoff_seconds: 3
max_doublings: 3
- description: "Update live streams"
url: /cron/update/lives
schedule: every 3 minutes
retry_parameters:
job_retry_limit: 2
min_backoff_seconds: 3
max_doublings: 3
/cron/update/new-channels 로 12시간마다 GET요청을 보낼 것입니다.
요청에 실패할 경우 최대 2번의 재시도를 할 것입니다. (200~299 이외의 status를 반환받은 경우)
1회 실패 시 3초 뒤에 재시도를 합니다.
2회 실패 시 3*2 뒤에 재시도를 합니다.
/cron/update/lives 로 3분마다 GET요청을 보낼 것입니다. (이하 동일)
4. api는 반드시 status를 반환해주어야 합니다.
// "/cron/update/lives"
app.get(
"/cron/update/lives",
wrapper(async (req, res) => {
try {
await updateTwitchLive(db);
res.status(200).send("OK");
} catch (error) {
console.error(error);
res.status(500).json({ error: "Internal server error" });
}
})
);
/cron/update/lives 로 GET요청이 있다면 updateTwitchLive 함수를 실행하고 200 status를 반환합니다.
크론 작업의 요청 핸들러가 200부터 299까지의 범위를 벗어나는 상태 코드를 반환하면
App Engine은 해당 작업이 실패한 것으로 간주합니다.
실패한 작업은 기본적으로 재시도되지 않습니다.
5. cron 스케줄러에 등록하려면 gcloud app deploy cron.yaml
cron.yaml을 작성하고 실행하면 등록이 된다.
=> 로그에서 자동으로 api 요청이 오는 것을 볼 수 있다.
=> 마지막으로 실행된 시각과, 다음 실행 시간을 알 수 있다.
'유튜브컨텐츠탐색-StelLife > Google App Engine' 카테고리의 다른 글
GCP 배포 Uncaught SyntaxError: Unexpected token '<' 에러 해결 방법들 (0) | 2023.08.05 |
---|---|
[GCP] babel-node doesn't work with type: module. (0) | 2023.02.21 |
프로젝트(6) - 구글 클라우드 플랫폼 서버 배포, gcp error (3) | 2023.02.10 |