NginX Log Rotation

9

Podaję kilka różnych domen za pośrednictwem NginX na tym samym serwerze i każda z nich loguje się do własnego pliku. Muszę skonfigurować skrypt do obracania, kompresowania tych plików i dodawania ich do crona.

Wiem, że muszę coś zrobić, aby NginX otworzył nowy plik dziennika po przeniesieniu starego. Czy ktoś może mi podać procedurę bezpiecznego obracania plików dziennika Nginx? Zgaduję, że muszę użyć Logrotate, jak to skonfigurować?

System:

  • Serwer Ubuntu 9.04 ed.
  • nginx / 0,7.61
John F. Miller
źródło

Odpowiedzi:

18

Stało się to swego rodzaju nieformalnym pół-standardem wśród demonów Uniksa, że ​​opróżniają i / lub obracają swoje pliki dziennika, gdy wysyłasz im sygnał zawieszenia ( SIGHUP). Nginx nie przestrzega tej konwencji w stosunku do litery, ale reaguje na USR1sygnał w ten sam sposób, co zostało udokumentowane na stronie internetowej Nginx pod tytułem Log Rotation .

Więc możesz spróbować czegoś takiego

kill -s USR1 `pidof nginx`
Jörg W Mittag
źródło
1
inny sposób: „pkill -USR1 -n -x nginx”
Palani
11

rejestrowanie logów Nginx:

# nginx SIGUSR1: Re-opens the log files.
/opt/nginx/logs/access.log {
  missingok
  notifempty
  delaycompress
  sharedscripts
  postrotate
    test ! -f /opt/nginx/logs/nginx.pid || kill -USR1 `cat /opt/nginx/logs/nginx.pid`
 endscript 
}

/opt/nginx/logs/error.log {
  missingok
  notifempty
  delaycompress
  sharedscripts
  postrotate  
    test ! -f /opt/nginx/logs/nginx.pid || kill -USR1 `cat /opt/nginx/logs/nginx.pid`
  endscript
}

dziennik produkcji szyn logujących:

/home/app_user/apps/railsapp/log/production.log {
  missingok
  notifempty
  delaycompress
  sharedscripts
  postrotate
    test ! -f /opt/nginx/logs/nginx.pid || kill -USR1 `cat /opt/nginx/logs/nginx.pid`
  endscript
}

źródło
W jakim pliku powinienem to umieścić?
Emil Stenström,
w przypadku korzystania z ubuntu, należy umieścić te linie kodu do tego pliku /etc/logrotate.d/nginx. i zacznie obowiązywać.
Siwei Shen 申思维
3

Jeśli używasz logrotate, dodaj następujące (z poprawną lokalizacją) do sekcji nginx w logrotate.conf:

postrotate
  kill -s USR1 `cat /location/of/nginx.pid`
endscript

Według strony podręcznika logrotate (8)

Lamnk
źródło