logrotate 옵션 정리

문정현·2025년 2월 19일

Logroatate 옵션

  • daily, weekly, monthly, yearly: 로그 회전 주기를 설정합니다. 각각 일별, 주별, 월별, 연별로 로그를 회전시킵니다.
  • rotate [count]: 보관할 로그 파일의 개수를 지정합니다. 예를 들어, rotate 5로 설정하면 최신 로그 5개를 유지하고, 그 이전의 로그는 삭제됩니다.
  • size [size]: 로그 파일의 크기가 지정한 값보다 클 때 회전합니다. 예를 들어, size 100M으로 설정하면 로그 파일이 100MB를 초과할 때 회전합니다.
  • missingok: 로그 파일이 없어도 에러를 발생시키지 않고 넘어갑니다.
  • compress: 회전된 로그 파일을 압축합니다. 기본적으로 gzip을 사용하며, 압축된 파일의 확장자는 .gz입니다.
  • delaycompress: 가장 최근에 회전된 로그 파일은 다음 회전 시까지 압축하지 않습니다.
  • notifempty: 로그 파일이 비어 있으면 회전하지 않습니다.
  • create [mode][owner] [group]: 새로운 로그 파일을 지정한 권한, 소유자, 그룹으로 생성합니다. 예를 들어, create 0640 nginx nginx는 권한 0640, 소유자 및 그룹이 nginx인 파일을 생성합니다.
  • dateext: 회전된 로그 파일 이름에 날짜를 추가합니다. 기본 형식은 YYYYMMDD입니다.
  • dateformat [format]: dateext와 함께 사용하여 날짜 형식을 지정합니다. 예를 들어, dateformat -%Y%m%d-%s20240217-1613551827과 같은 형식을 생성합니다.
  • olddir [directory]: 회전된 로그 파일을 지정한 디렉터리로 이동시킵니다.
  • sharedscripts: 여러 로그 파일이 한 번에 회전될 때, prerotatepostrotate 스크립트가 각 로그 파일마다 실행되지 않고 한 번만 실행되도록 합니다.
  • postrotate/endscript: 로그 회전 후 실행할 스크립트를 지정합니다. 예를 들어, Nginx의 로그를 회전한 후 로그 파일을 다시 열기 위해 다음과 같이 설정할 수 있습니다:

postrotate 스크립트 설명

USR1 명령어는 Nginx 프로세스에게 시그널을 전송하는 명령어입니다.
프로세스를 중단하지 않고 기존에 열어둔 로그 파일을 새로 다시 여는 행위라고 요약할 수 있습니다.

1. 로그 파일 다시 열기(Re-opening Log Files)의 의미

Nginx는 실행 중에 로그를 기록하기 위해 로그 파일을 열어두고, 해당 파일에 로그를 지속적으로 작성합니다. 하지만 로그 파일이 교체되거나(logrotate 등으로 인해) 삭제된 경우, Nginx는 여전히 이전에 열었던 파일에 로그를 쓰려고 시도합니다. 이러한 상황에서는 새로운 로그 파일에 로그가 기록되지 않을 수 있습니다.

이때 USR1 시그널을 Nginx의 마스터 프로세스에 보내면, Nginx는 현재 열려 있는 모든 로그 파일을 닫고, 설정된 경로에 따라 다시 열어 새로운 로그 파일에 로그를 기록하기 시작합니다. 이를 통해 로그 파일의 교체나 회전 후에도 로그가 올바르게 기록되도록 합니다.

2. 명령어 분석: kill -USR1 \cat /home/nginx/pid/nginx_oper/nginx_oper.pid``

이 명령어는 Nginx의 마스터 프로세스에 USR1 시그널을 보내어 로그 파일을 다시 열도록 지시합니다.

  1. cat /home/nginx/pid/nginx_oper/nginx_oper.pid:
    • 이 명령어는 Nginx 마스터 프로세스의 PID(Process ID)를 저장한 파일인 /home/nginx/pid/nginx_oper/nginx_oper.pid를 읽어, 해당 프로세스 ID를 출력합니다.
  2. 백틱(```):
    • 백틱으로 감싼 명령어는 쉘에서 먼저 실행되며, 그 결과가 외부 명령어의 인수로 사용됩니다. 즉, 위의 cat 명령어를 실행하여 얻은 PID 값을 kill 명령어의 인수로 전달합니다.
  3. kill -USR1 [PID]:
    • kill 명령어는 프로세스에 시그널을 보내는 데 사용됩니다. 여기서 USR1은 사용자 정의 시그널 1을 의미하며, Nginx는 이 시그널을 받으면 로그 파일을 다시 열도록 설계되어 있습니다.

따라서 전체 명령어 kill -USR1 \cat /home/nginx/pid/nginx_oper/nginx_oper.pid``는 다음과 같은 순서로 동작합니다:

  1. cat /home/nginx/pid/nginx_oper/nginx_oper.pid 명령어를 실행하여 Nginx 마스터 프로세스의 PID를 얻습니다.
  2. 얻은 PID를 사용하여 kill -USR1 [PID] 명령어를 실행합니다.
    • 예를 들어, PID가 1234라면 kill -USR1 1234와 같이 실행됩니다.
  3. 이로써 Nginx 마스터 프로세스에 USR1 시그널이 전달되어, Nginx는 현재 열려 있는 로그 파일을 닫고 다시 열어 새로운 로그 파일에 로그를 기록하기 시작합니다.

이러한 방식으로, 로그 파일이 교체되거나 회전된 후에도 Nginx가 새로운 로그 파일에 정상적으로 로그를 기록할 수 있도록 보장합니다.

Reference

logrotate(8) - Linux manual page
Linux 로그 관리 logrotate
Controlling nginx

profile
기록 == 성장

0개의 댓글