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로 업데이트해요:
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 정책일 때 최대 재시도 횟수를 설정할 수 있어요.
엔드포인트: 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에 다른 정책을 계속 적용할 수 있어요.