본문으로 건너뛰기

잡 상태와 종료 이유

잡이 거치는 상태 값, 종료 이유, 오류 필드와 각 상태에서 과금이 어떻게 되는지 설명합니다

잡은 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_outtimeout_minutes를 넘겨 멈춤제한 시간까지의 분
credit_exhausted조직 잔액이 다음 1분을 감당하지 못해 멈춤멈춘 시점까지의 초
platform_errorVM 준비 실패, 러너 장애, 서버 재시작 등 플랫폼 책임0, 원장에 기록하지 않음
stopped잡을 시작한 키나 멤버, 워크스페이스, 조직이 더 이상 유효하지 않아 15초마다 도는 검사가 멈춤멈춘 시점까지의 실행 시간 (시작 전이면 0)

stopped를 뺀 종료 상태 여섯 가지(succeeded, failed, cancelled, timed_out, credit_exhausted, platform_error)에서는 end_reason이 상태와 같은 값으로 채워집니다

stopped의 end_reason은 멈춘 이유입니다

값뜻
api_key_revoked잡을 시작한 API 키가 폐기됨 (사람이 폐기, 공개 유출 자동 폐기 포함)
api_key_expired실행 중에 키의 만료 시각이 지남
api_key_scope_changed키가 더 이상 잡을 실행할 권한(run)이 없음
member_removed콘솔에서 잡을 시작한 멤버가 조직이나 워크스페이스에서 빠짐
workspace_archived잡의 워크스페이스가 보관됨
organization_suspended조직 이용이 정지됨

대기 이유

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_errorVM 준비 두 번 실패, 러너 장애, 서버 재시작 (status: platform_error)platform

스크립트 자체가 실패한 failed에는 error가 없고 exit_code만 있습니다

시각과 과금 필드

필드뜻
created_at접수 시각
started_at스크립트 시작 시각 과금 시작점
ended_at종료 시각 취소와 시간 초과는 멈추기로 한 시각
run_secondsended_at - started_at을 초 단위로 내림
billed_seconds0초면 0, 아니면 max(60, 실행 초), 초 미만은 버림
billed_minutesceil(billed_seconds / 60), 시작한 분 수, 금액은 초 단위로 계산
rate_micro_usd_per_min대기열을 떠날 때 고정된 분당 요율
amount_micro_usd정산 금액 실행 중에는 지금까지 약정된 분의 금액

정산 금액은 살아 있는 크레딧 로트 합을 넘지 않으므로 잔액이 음수가 되는 일은 없습니다

상태 확인 방법

xenocast status job_7Kp2QmX9bT4vR1sLwZ3n
xenocast wait job_7Kp2QmX9bT4vR1sLwZ3n --timeout 600

wait는 종료 상태가 될 때까지 2초마다 다시 읽고, 제한 시간 안에 끝나지 않으면 종료 코드 124로 돌아옵니다

콘솔에서는 실행 → 잡 메뉴에서 상태별로 거르고 상세 패널에서 로그를 봅니다

다음 단계