본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Machine 재시작 정책

원문 보기 위키 갱신

Machine 재시작 정책은 메인 프로세스가 종료된 후 flyd가 Machine을 재시작할지, 어떻게 재시작할지를 정의해요. 재시작 정책은 Machine별로 적용되며, 앱 전체 설정이 아니에요. 이 문서에서는 각 재시작 정책의 의미와 flyctl, Machines API, fly.toml로 이를 확인·변경하는 방법을 설명해 드릴게요.

출처: 문서

본문

Machine 재시작 정책은 메인 프로세스가 종료된 후 flyd가 Machine을 재시작할지 여부와 방법을 정의해요. 재시작 정책은 Machine별로 적용되며 앱 전체 설정이 아니에요.

재시작 정책은 다음과 같아요:

  • no: 메인 프로세스가 종료될 때(의도적이든 크래시든) Machine을 자동으로 재시작하지 않아요. no는 --rm 옵션을 사용해 fly m run으로 종료 시 자동 파괴되는 Machine을 만들 때의 기본값이에요.

  • always: 메인 프로세스가 정상적으로 종료돼도 Machine을 항상 자동 재시작하고 절대 stopped 상태로 들어가지 않게 해요. always는 fly m run으로 Machine을 만들 때와 Fly Postgres 앱 Machine의 기본값이에요. 서비스가 구성되지 않은 "항상 켜짐" 앱에 권장돼요. Machine이 종료 코드와 관계없이 재시작되기 때문이에요.

  • on-fail(Machines API와 Machine 구성에서 볼 때는 on-failure): Machine이 0이 아닌 종료 코드로 종료되면, 5분 창 안에서 최대 max_retries(기본 10)번까지 자동 재시작을 시도한 뒤 멈추게 해요. 서비스가 구성된 대부분의 Machine에 권장돼요. Fly Proxy가 요청이 있을 때 이들을 깨울 수 있기 때문이에요. on-fail은 Machine이 크래시하면 재시작되게 하고, 앱 Machine이 정상 종료하여 효과적으로 스케일다운되게 해 줘요. on-fail은 Machine 구성에 명시적인 재시작 정책이 없을 때의 기본값이에요. fly launch와 fly deploy가 만든 Machine처럼요. 스케줄이 있는 Machine도 기본적으로 on-fail 재시작 정책을 사용해요.

Machine의 재시작 정책 확인하기

Machine의 상태와 구성을 json 형식으로 표시해요:

fly m status -d <machine id> 

always 재시작 정책이 있는 예제 출력:

...
Config:
{
  "init": {},
  "image": "registry-1.docker.io/flyio/hellofly:latest",
  "restart": {
    "policy": "always"
  },
  "guest": {
    "cpu_kind": "shared",
    "cpus": 1,
    "memory_mb": 256
  },
  "dns": {}
}

flyctl로 Machine의 재시작 정책 변경하기

Machine 구성을 업데이트해요:

fly m update <machine id> --restart <no | always | on-fail>

다음 예제는 Machine의 재시작 정책을 on-fail로 업데이트해요:

```bash cmd fly m update 3908032c794088 --restart on-fail ```
Configuration changes to be applied to machine: 3908032c794088 (my-app-name)

  \t... // 2 identical lines
  \t  "image": "registry-1.docker.io/flyio/hellofly:latest",
  \t  "restart": {
- \t    "policy": "always"
+ \t    "policy": "on-failure"
  \t  },
  \t  "guest": {
  \t... // 6 identical lines

? Apply changes? (y/N)

변경 사항을 적용하려면 y를 입력하세요.

Machines API로 Machine의 재시작 정책 변경하기

Machines API에서는 재시작 정책과, on-failure 정책일 때 최대 재시도 횟수를 설정할 수 있어요.

**중요:** API와 반환되는 Machine 구성은 `on-fail` 대신 `on-failure`를 사용해요.

엔드포인트: POST /apps/{app_name}/machines/{machine_id}

예를 들어:

...
    "restart": {
      "max_retries": 5,
      "policy": "on-failure"
    },
...

Machine 업데이트에 대한 자세한 내용은 Machines API 문서를 참고하세요.

fly.toml에서 재시작 정책 설정하기

fly.toml 파일에서 앱 수준 기본 재시작 정책을 설정할 수도 있어요:

[[restart]]
  policy = "<never | always | on-failure>"
  retries = 10
  processes = ["app"]

재시작 정책은 특정 프로세스 그룹을 대상으로 할 수 있어요. 그룹을 지정하지 않으면 앱의 모든 Machine이 같은 기본 재시작 정책을 가져요. 필요하다면 위의 flyctl 또는 Machines API 방법으로 개별 Machine에 다른 정책을 계속 적용할 수 있어요.

더 알아보기 (Learn more)