택시짱의 개발 노트

왜 uwsgi에서 pid를 이용한 reload가 잘 안될까? 본문

카테고리 없음

왜 uwsgi에서 pid를 이용한 reload가 잘 안될까?

택시짱 2020. 7. 23. 18:42

/data/venv/backendapi/bin/uwsgi --chdir=/data/cce-api-admin --module=config.wsgi:application --http=0.0.0.0:8089 --pidfile=/tmp/cce-api-admin.pid --master --enable-threads --thunder-lock --daemonize2=/dev/null

 

현재 server를 실행시키는 command이다. 

 

먼저 pid가 뭔가 알아보자

리눅스 프로세스(process)란

  • 프로세스(prcess)란 현재 실행 중인 프로그램을 의미한다. 리눅스는 여러 개의 프로그램을 동시에 실행할 수 있으며 이것을 다중실행(multi-tasking)이라고 한다.

 

  • 하나의 명령이 실행하기 위해서 하나 또는 여러 개의 프로세스가 생성되어 수행된다. 프로세스 간에는 부모-자식 관계가 있는데 부모가 자식을 생성하고 자식이 또 자신의 자식을 생성하는 등 프로세스들 사이에 트리(tree) 관계가 형성한다. 예를 들어 쉘이 실행되면 이 자체로 프로세스이고 쉘 안에서  명령이 실행되면 쉘-프로세스의 자식 프로세스가 생성된다.

 

  • 프로세스들은 각기 고유한 번호가 있으며 이를 PID(Process Identification Number)라고 한다. 데비안 리눅스가 부팅될 때에는 모든 프로세스의 최상위 프로세스인 systemd (PID는 1)이 생성되고 모든 프로세스들은  이 1번 프로세스의 자식 프로세스들이다. 부모 프로세스의 PID를 줄여서 PPID라고 한다.

 

  • 프로세스를 분류하면 데몬(daemon), 자동 프로세스, 상호작용 프로세스  등으로 분류할 수 있다.

 

PID 파일 (pidfile)

  • 오랜 시간 실행되는 일부 프로세스(예: MySQL 데몬)들은 다른 프로세스들이 알 수 있도록 PID를 파일에 기록한다.

 

데몬(daemon)

  • 데몬은 항상 백그라운드로 실행되는 프로세스이며 대부분 부팅시에 자동으로 시작된다. 데몬은 평수에 대기 상태로 서비스 요청을 기다리다가 요청이 들어오면 해당 서비스를 제공한다. 프로세스이름 끝에 보통 ‘d’가 붙어있으며 예를 들면 네트워킹 데몬인 xinetd 이다. 이 프로세스는 부팅시에 실행되고 백그라운드에서 대기하다가 ftp 클라이언트 같은 네트워크 프로그램이 연결을 요구할 때까지 기다린다.

 

파일 저장 위치

  • /data/venv/backendapi/bin/uwsgi --chdir=/data/cce-api-admin --module=config.wsgi:application --http=0.0.0.0:8089 --pidfile=/tmp/cce-api-admin.pid --master --enable-threads --thunder-lock --daemonize2=/dev/null

 

보면 pid 파일이 tmp 디렉토리에 저장이 된다. 그러면 linux의 tmp 디렉토리는 무엇을 하는지 알아보자

 

/tmp

  • 일명 "공용디렉토리" . 시스템을 사용하는 모든 사용자들이 공동으로 사용하는 디렉토리. mysql 에서 사용하는 mysql.sock 등과 같은 소켓파일, 또는 아파치에서 사용하는 세션파일등이 생성되기도 한다. 웹해킹에 사용되기도 해서 주의를 요망. 
  • 또는 세션정보나 혹은 워드프로세서에서 작업한다면 현재까지 저장되어있지 않은 현재 작업내용등이 저장됩니다.
  • 웹서버 운영시 임시파일이 저장되는 디렉토리인 /tmp가 필요합니다. /tmp 디렉토리는 기본값으로 아무나 읽고, 쓰고, 실행하도록 설정 되어 있습니다. 그렇기 때문에 웹서비스를 통해 /tmp 디렉토리에 악성, 해킹 스크립트를 넣어서 실행 시킬 수 있어, 서버 보안에 치명적일 수 있습니다.

 /tmp는 10일간, /var/tmp는 30일간 접근되지 않은 파일들을 삭제한다.


그렇다면 현재 우리 서버에서 사용중인 CentOs에서 tmp 디렉토리는 어떤 역활을 수행하고 있을까?

 

CentOS에서 tmp의 역활

  • CentOS에서는 주기적으로 오래동안 사용하지 않는 /tmp 아래의 내용을 삭제하는 Cron이 동작한다.

Cron이 뭐지?

 

Cron(크론)

  • 시스템 관리자는 보안이나 시스템의 관리 등을 위해 주기적으로 동일한 작업을 반복 수행해야 한다. linux에서는 미리 구성된 시간에 실행되도록 작업을 할당하는 스케쥴링 도구가 크론이다.

 

Cron 동작하는 방식

  • Cron은 부팅할 때 시작되고 데몬으로 백그라운드로 실행된다. 즉, 사용자의 개입이 없이 실행되고 결정할 어떤 이벤트가 발생하기를 기다리게 된다.

 

결론

1. Cron의 스케쥴링이 되어 pid파일이 삭제될때 보다 서버 reload를 더 먼저 한다....?

2. Cron의 스케쥴링 기간을 늘린다.

3. pid 파일을 tmp 폴더가 아닌 다른 폴더에 저장을 한다.

 

 

찐 결론

1. 각각의 따로 폴더를 만들어 pid를 관리한다.

반응형
Comments