# 실행중에 실행파일 업그레이드하기

> Clean Markdown view of GeekNews topic #5699. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=5699](https://news.hada.io/topic?id=5699)
- GeekNews Markdown: [https://news.hada.io/topic/5699.md](https://news.hada.io/topic/5699.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2022-01-06T11:26:25+09:00
- Updated: 2022-01-06T11:26:25+09:00
- Original source: [nginx.org](https://nginx.org/en/docs/control.html#upgrade)
- Points: 17
- Comments: 1

## Topic Body

- Nginx 가 사용하는 업그레이드 방식

ㅤ→ 원본 파일의 실행파일을 새 것으로 교체

ㅤ→ USR2 시그널을 마스터 프로세스에 전송

ㅤ→ 마스터 프로세스가 자기 프로세스ID의 파일을 .oldbin 확장자로 교체

ㅤ→ 새 실행 파일을 시작시켜서 새로운 워커프로세스 만들도록 함

ㅤ→ 모든 워커프로세스들이 리퀘스트 받기 시작

ㅤ→ WINCH 시그널이 첫번째 마스터 프로세스에 보내지면, 자신의 워커 프로세스들에게 정상 종료하도록 요청

- 기존 마스터 프로세스는 리슨 소켓을 닫지 않으며, 필요시 다시 워커 프로세스 생성 가능

- 혹시 신규 마스터 프로세스가 제대로 동작하지 않으면

ㅤ→ 기존 마스터 프로세스에게 HUP 시그널을 보내서 새로운 워커 프로세스 시작하도록 하고, 신규 마스터 프로세스의 워커들이 종료된 후 신규 마스터에게 QUIT 보내서 종료 시킴

ㅤ→ 새 마스터 프로세스 에게 TERM 시그널 보내서 현재 워커 프로세스들에게 즉시 중단하도록 요청. 신규 마스터가 죽으면 기존 마스터가 새 워커 프로세스들 시작

- 이렇게 새 마스터 프로세스가 종료되면 기존 마스터 프로세스가 .oldbin 확장자를 지움

- 업그레이드가 성공하면 기존 마스터 프로세스에게 QUIT 시그널을 보내서 종료시키고 새 프로세스만 남김

## Comments



### Comment 8300

- Author: xguru
- Created: 2022-01-06T11:26:31+09:00
- Points: 2

Caddy 1 도 이 방식을 이용한다고

Envoy의 Hot Restart 방식 https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/operations/hot_restart.html

HAProxy Seamless Reload https://www.haproxy.com/blog/truly-seamless-reloads-with-haproxy-no-more-hacks/
