잡 상태와 종료 이유
잡이 거치는 상태 값, 종료 이유, 오류 필드와 각 상태에서 과금이 어떻게 되는지 설명합니다
잡은 queued에서 시작해 preparing, running을 거쳐 여섯 가지 종료 상태 중 하나로 끝나고, 과금은 running 구간만 셉니다
상태 흐름
queued ──▶ preparing ──▶ running ──▶ succeeded | failed | cancelled | timed_out | credit_exhausted
│ │ (실행 초를 1분 단위로 올림해 과금)
│ └──▶ platform_error (VM 준비 실패, 과금 없음)
└──▶ cancelled | failed | credit_exhausted (시작 전 종료, 과금 없음)| 상태 | 뜻 | 과금 |
|---|---|---|
queued | 접수됨, 빈 VM 슬롯이나 티어 동시 실행 여유를 기다림 | 없음 |
preparing | 슬롯을 받아 베이스 이미지를 복제하고 VM을 부팅하는 중 | 없음 |
running | 스크립트가 실행 중 (started_at부터) | 진행 중 |
succeeded | 스크립트 종료 코드 0 | 실행 분 |
failed | 스크립트 종료 코드가 0이 아님, 또는 시작 전 승인 거절 | 실행 분 (시작 전이면 0) |
cancelled | 취소 요청으로 끝남 | 멈춘 시점까지의 실행 분 (시작 전이면 0) |
timed_out | timeout_minutes를 넘겨 멈춤 | 제한 시간까지의 분 |
credit_exhausted | 조직 잔액이 다음 1분을 감당하지 못해 분 경계에서 멈춤 | 멈춘 시점까지의 분 |
platform_error | VM 준비 실패, 러너 장애, 서버 재시작 등 플랫폼 책임 | 0, 원장에 기록하지 않음 |
종료 상태 여섯 가지(succeeded, failed, cancelled, timed_out, credit_exhausted, platform_error)에서는 end_reason이 상태와 같은 값으로 채워집니다
대기 이유
queued인 동안 queued_reason이 왜 기다리는지 알려줍니다
| 값 | 뜻 |
|---|---|
capacity | 빈 VM 슬롯을 기다리는 중 (막 접수된 잡의 기본값) |
tier_concurrency_limit | 조직의 동시 실행 잡 수가 티어 한도에 닿음 실행 중인 잡이 끝나면 차례대로 시작 |
빈 슬롯은 대기 잡이 있는 조직 가운데 지금 실행 중인 잡이 가장 적은 조직에 먼저 가고, 같으면 가장 오래 기다린 잡의 조직이 먼저입니다
실행 중인 잡을 빼앗는 선점은 없습니다
오류 필드
잡이 스크립트 밖의 이유로 끝나면 error에 오류 봉투가 들어갑니다
{
"status": "credit_exhausted",
"end_reason": "credit_exhausted",
"error": {
"code": "credit_exhausted",
"message": "Stopped at a minute boundary: the organization balance ran out",
"retryable": false,
"retry_after_s": null,
"fault": "payment",
"request_id": "job_7Kp2QmX9bT4vR1sLwZ3n",
"details": { "topup_url": "https://xenoci.com/console/billing" }
}
}error.code | 언제 | fault |
|---|---|---|
credit_exhausted | 실행 중 잔액 소진 (status: credit_exhausted) | payment |
insufficient_credit | 대기 중 잔액이 1분 요금 밑으로 내려가 시작 못 함 (status: credit_exhausted) | payment |
workspace_spend_limit, tier_monthly_limit | 대기 중 월 한도에 닿아 시작 못 함 (status: failed) | payment |
internal_error | VM 준비 두 번 실패, 러너 장애, 서버 재시작 (status: platform_error) | platform |
스크립트 자체가 실패한 failed에는 error가 없고 exit_code만 있습니다
시각과 과금 필드
| 필드 | 뜻 |
|---|---|
created_at | 접수 시각 |
started_at | 스크립트 시작 시각 과금 시작점 |
ended_at | 종료 시각 취소와 시간 초과는 멈추기로 한 시각 |
run_seconds | ended_at - started_at을 초 단위로 내림 |
billed_minutes | ceil(run_seconds / 60) 0초면 0분, 61초면 2분 |
rate_micro_usd_per_min | 대기열을 떠날 때 고정된 분당 요율 |
amount_micro_usd | 정산 금액 실행 중에는 지금까지 약정된 분의 금액 |
정산 금액은 살아 있는 크레딧 로트 합을 넘지 않으므로 잔액이 음수가 되는 일은 없습니다
상태 확인 방법
xenocast status job_7Kp2QmX9bT4vR1sLwZ3n
xenocast wait job_7Kp2QmX9bT4vR1sLwZ3n --timeout 600wait는 종료 상태가 될 때까지 2초마다 다시 읽고, 제한 시간 안에 끝나지 않으면 종료 코드 124로 돌아옵니다
콘솔에서는 실행 → 잡 메뉴에서 상태별로 거르고 상세 패널에서 로그를 봅니다