본문으로 건너뛰기

시간 제한과 취소

잡의 제한 시간을 정하는 법, 취소 요청이 각 상태에서 하는 일, 멈출 때 스크립트가 받는 신호와 과금을 설명합니다

잡마다 제한 시간을 분 단위로 정하고, 언제든 취소할 수 있으며, 멈춘 시점까지 실행한 분만 과금됩니다

제한 시간

timeout_minutes는 1~360 사이 정수이고 기본값은 60입니다

시간은 스크립트가 시작한 started_at부터 셉니다

VM 준비 시간은 포함하지 않습니다

진입점지정 방법기본값
API"timeout_minutes": 3060
CLIxenocast build --timeout 3060
MCP buildtimeout_minutes: 3060
GitHub Actionswith: timeout: 3030
콘솔 플레이그라운드폼의 제한 시간30

제한 시간이 지나면 러너는 스크립트를 멈추고 잡을 timed_out으로 끝냅니다

과금은 제한 시간 경계까지의 분입니다

예를 들어 timeout_minutes: 30이면 정확히 30분이 과금되고 멈추는 데 걸린 시간은 더하지 않습니다

빌드가 보통 얼마나 걸리는지 모르면 넉넉히 잡아도 손해가 없습니다

과금은 실제 실행한 분이고 제한 시간은 상한일 뿐입니다

반대로 무한 루프나 멈춘 시뮬레이터를 막는 안전장치로는 작게 잡는 편이 낫습니다

취소

curl -s -X POST https://xenoci.com/api/runner/v1/jobs/job_7Kp2QmX9bT4vR1sLwZ3n/cancel \
  -H "Authorization: Bearer $XENOCI_API_KEY"
xenocast cancel job_7Kp2QmX9bT4vR1sLwZ3n
취소 시점의 상태결과과금
queued바로 cancelled0
preparingcancelled, 준비 중이던 VM은 지움0
running스크립트를 멈춘 뒤 cancelled취소 요청 시각까지의 분
이미 cancelled그 잡을 그대로 돌려줌 (재시도해도 오류 없음)변화 없음
그 밖의 종료 상태409 conflict변화 없음

과금 종료 시각은 취소를 결정한 순간입니다

스크립트가 신호를 받고 실제로 내려가는 데 걸리는 시간은 과금하지 않습니다

스크립트가 받는 신호

실행 중인 잡을 멈추면 VM 안의 스크립트 프로세스 그룹에 SIGTERM을 보내고, 30초 안에 끝나지 않으면 SIGKILL로 끝냅니다

정리 작업이 필요하면 스크립트에서 trap으로 TERM을 받아 30초 안에 마치세요

#!/bin/bash
cleanup() { xcrun simctl shutdown all || true; }
trap cleanup TERM
xcodebuild -scheme "$XENOCI_SCHEME" -destination 'platform=iOS Simulator,name=iPhone 16' test

잡이 끝나면 VM은 통째로 지워지므로 임시 파일을 지우는 정리는 필요 없습니다

CLI와 GitHub Actions에서 끊길 때

  • xenocast build가 기다리는 동안 Ctrl+C를 누르거나 CI가 SIGTERM을 보내면 CLI가 먼저 잡 취소를 요청한 뒤 종료합니다, 두 번째 신호는 취소 요청 없이 바로 종료합니다
  • GitHub Actions 워크플로를 취소하면 xeno-ci/build 단계가 같은 방식으로 잡을 취소합니다, 잡이 남아서 Mac을 붙잡고 있는 일은 없습니다
  • 취소 요청이 실패하면 CLI가 xenocast cancel <job_id>를 안내합니다

잔액으로 멈추는 경우

취소와 시간 초과 말고도 조직 잔액이 다음 1분을 감당하지 못하면 러너가 분 경계 5초 전에 잡을 멈추고 credit_exhausted로 끝냅니다

여러 잡이 돌고 있으면 먼저 시작한 잡의 다음 분을 먼저 확보하고 가장 늦게 시작한 잡부터 멈춥니다

자세한 내용은 잡 상태와 종료 이유에 있습니다

다음 단계