Orbit
Orbit 크론 작업
Cron jobs schedule recurring HTTP requests to your deployed project, so a nightly cleanup, an hourly sync or a weekly digest runs on time without you standing up a separate scheduler.
Cron 작업은 배포된 프로젝트에 대한 반복적인 HTTP 요청을 예약하므로, 매일 밤 정리, 매시간 동기화 또는 매주 요약이 별도의 스케줄러를 구성하지 않고도 제때에 실행됩니다.
Cron 작업의 위치
Orbit을 열고 프로젝트를 클릭한 다음 프로젝트 탭 스트립의 Configure 그룹 아래에서 Crons을 선택합니다. 페이지의 제목은 Cron jobs이며, UTC의 표준 5필드 cron 구문 또는 @hourly, @daily, @weekly, @monthly 별칭을 사용하여 프로덕션 배포에 HTTP 요청을 예약하는 역할을 설명합니다.
페이지에는 호출할 Target host가 표시되므로 올바른 배포를 가리키고 있는지 한눈에 확인할 수 있습니다.

작동 방식
Orbit은 스케줄러에서 코드를 실행하지 않습니다. 일정에 따라 프로젝트의 URL을 호출하고 코드가 작업을 수행합니다.
이는 예약하는 항목이 응용 프로그램의 일반적인 경로(예: /api/cron/cleanup)임을 의미합니다. 앱이 요청에 응답하여 할 수 있는 모든 작업을 일정에 따라 수행할 수 있습니다.
Cron 작업 만들기
- New cron을 클릭합니다.
- Name을 지정합니다(최대 120자).
- 프로젝트의 Path를 설정합니다(슬래시로 시작).
- 사전 설정에서 Schedule을 선택하거나 표현식을 입력합니다.
- Method를 선택합니다.
GET이 기본값입니다. - 메서드가 POST, PUT 또는 PATCH인 경우 Request body를 추가합니다.
- Timeout을 1~300초 사이로 설정합니다. 기본값은 30입니다.
- 자신의 인증이 없으면 Generate a Bearer secret 옵션을 선택 상태로 둡니다.
- Create cron을 클릭합니다.
일정 사전 설정
| 사전 설정 | 표현식 |
|---|---|
| 5분마다 | */5 * * * * |
| 15분마다 | */15 * * * * |
| 시간 단위 | @hourly |
| 매일 09:00 UTC | 0 9 * * * |
| 매일 자정 | @daily |
| 월요일 09:00 주 단위 | 0 9 * * 1 |
| 월 1일 | @monthly |
또는 자신의 5필드 표현식을 작성합니다: 분, 시간, 일, 월, 요일.
모든 일정은 UTC이며, 일광 절약 시간 조정이 없습니다. 0 9 * * *에 설정된 작업은 연중 내내 UTC 오전 9시에 실행되며, 1년에 두 번 뉴질랜드 시간과 1시간 차이가 납니다. 작업이 특정 현지 시간에 실행되어야 하는 경우, UTC 시간을 의도적으로 선택하고 최적화한 연도의 절반을 기록합니다.
호출 인증
Bearer secret 옵션을 선택 상태로 두면 모든 실행에서 Authorization 헤더로 전송되는 임의의 토큰이 생성됩니다. 생성 직후에 표시되며, 다시 표시되지 않을 것이라는 주의가 함께 표시됩니다.
복사하여 핸들러에서 확인합니다:
export async function GET(req) {
const auth = req.headers.get('authorization');
if (auth !== `Bearer ${process.env.CRON_SECRET}`) {
return new Response('Unauthorized', { status: 401 });
}
// do the work
}
프로젝트의 환경 변수를 사용하여 시크릿을 저장합니다. Orbit의 환경 변수를 참조하세요.
이와 같은 검사 없이는 cron 경로가 누구든지 원하는 만큼 자주 호출할 수 있는 공개 URL입니다. 무해한 작업의 경우 문제없지만 쓰기, 이메일 전송 또는 비용이 드는 작업의 경우 심각합니다. 첫 실행 전에 검사를 추가하세요. 누군가 엔드포인트를 발견한 후가 아니라.
또는 애플리케이션이 이미 인증 스킴을 가지고 있는 경우 대신 자신의 헤더를 전송할 수 있습니다.
작업 목록 읽기
각 작업은 다음을 표시합니다:
- Schedule: 실행할 표현식입니다.
- Next: 다음 실행 시간입니다.
- Last: 마지막 실행 시간 및 결과입니다.
- ok / fail 카운터입니다.
- Last error: 가장 최근의 실패로 인한 메시지가 남겨진 위치입니다.
- PAUSED 배지: 비활성화되어 있을 때입니다.
각 행에는 4개의 작업이 있습니다: Run now, Pause 또는 Resume, Delete.
Run now는 일정에 관계없이 작업을 즉시 실행하고 결과를 보고합니다. 다음 틱을 기다리지 않고 새 작업을 테스트하는 올바른 방법입니다.
실행 결과
| 상태 | 의미 |
|---|---|
| OK | 엔드포인트가 성공 응답을 반환했습니다 |
| FAILED | 엔드포인트가 오류를 반환했거나 요청을 할 수 없었습니다 |
| TIMEOUT | 엔드포인트가 시간 초과 내에 응답하지 않았습니다 |
| SKIPPED | 실행이 실행되지 않았습니다 |
각 실행은 상태, 응답 코드, 지속 시간, 오류 및 트리거한 항목과 함께 기록되므로, 간헐적으로 실패하는 작업은 단일 "마지막 오류"가 아닌 읽을 수 있는 추적 기록을 남깁니다.
시간 초과 선택
시간 초과는 실행당 1~300초이며, 기본값은 30입니다.
작업의 실제 최악의 경우보다 조금 위로 설정하되, 훨씬 위로 설정하지 않습니다. 중단된 작업에 대한 관대한 시간 초과는 빌더가 아무것도 기다리지 않고 5분을 의미합니다. 정당하게 2분이 걸리는 작업에 대한 타이트한 시간 초과는 영구적인 실패와 오해의 소지가 있는 경고를 의미합니다.
더 좋은 방법은 핸들러를 빠르게 유지하는 것입니다: 작업을 수행하는 대신 작업을 대기열에 넣고 즉시 반환합니다. 200밀리초 내에 반환되는 cron 작업은 절대 시간 초과가 되지 않습니다.
제한
프로젝트는 최대 50개의 cron 작업을 보유할 수 있습니다. 이는 프로젝트당이므로, 여러 프로젝트가 있는 계정은 총합이 더 많습니다.
스테이징이 아닌 프로덕션에 대해 무언가를 예약해야 하는 경우, 대신 Settings의 Cron triggers를 사용하세요. 해당 카드를 사용하면 환경을 선택할 수 있으며, 프로젝트당 최대 10개의 트리거로 제한됩니다. Orbit 프로젝트 설정을 참조하세요.
작업 삭제
Delete를 클릭하고 확인합니다. 확인 메시지는 실행 기록도 제거될 것임을 기록하므로, 작업의 동작 기록을 원하면 삭제하기 전에 캡처하세요.
작업을 삭제하지 말고 일시적으로 중지할 때 일시 중지합니다. 일시 중지하면 구성, 시크릿 및 기록이 그대로 유지됩니다.
실용적인 조언
핸들러를 멱등성으로 만드세요. cron 호출은 재시도할 수 있으며, Run now는 예약된 실행이 이미 진행 중인 동안 누를 수 있습니다. 핸들러는 작업을 두 번 하지 않고 두 번 실행되는 것을 대처해야 합니다.
모든 것을 매시간 시간에 예약하지 마세요. 모든 작업에 0 * * * *을 설정하면 모든 작업이 같은 시간에 경합합니다. 분산시키세요: 7 * * * *, 23 * * * * 등등.
핸들러 내부에 로그합니다. 실행 기록은 응답 코드와 지속 시간을 알려줍니다. 실제로 무슨 일이 일어났는지는 애플리케이션의 문제이며, 작업이 자동으로 아무것도 하지 않을 때 필요합니다.
문제 해결
모든 실행이 401로 FAILED입니다. 핸들러가 요청을 거부합니다. 환경 변수에 저장된 시크릿이 여기서 생성된 시크릿과 일치하는지 확인합니다. 비교에서 Bearer 접두사를 포함하세요.
모든 실행이 404로 FAILED입니다. 경로가 배포된 프로젝트에 존재하지 않습니다. 페이지에 표시된 대상 호스트에 대해 브라우저에서 테스트합니다.
실행이 TIMEOUT됩니다. 핸들러가 인라인으로 너무 많이 하고 있습니다. 작업을 분할하거나, 작업이 정말 오래 걸리고 런어웨이가 아닌 경우 시간 초과를 올립니다.
Next가 진행되지 않습니다. 작업이 일시 중지되어 있습니다. PAUSED 배지를 찾으세요.
작업이 잘못된 시간에 실행됩니다. UTC를 현지 시간과 확인합니다. 이것이 예약된 작업과 관련된 가장 일반적인 놀라움입니다.
다음으로 가기
- Orbit의 환경 변수: cron 시크릿 저장용입니다.
- Orbit 프로젝트 설정: 환경별 cron 트리거용입니다.
- Orbit Webhooks: 문제가 발생했을 때 알림을 받으려면입니다.