2016-03-31 8 views
1

In /etc/logrotate.d/nginx Ich finde:Wie startet Nginx neu, nachdem es durch log-rotate gelöscht wurde?

/var/log/nginx/*.log { 
    daily 
    missingok 
    rotate 52 
    compress 
    delaycompress 
    notifempty 
    create 640 nginx adm 
    sharedscripts 
    postrotate 
     [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` 
    endscript 
} 

Es ist der postrotate Befehl über Ich bin gespannt.

Ich nehme an, dass, sobald das Protokoll erfolgreich gedreht wurde, es den nginx Prozess tötet.

Ich weiß beim Neustart nginx das neue Protokoll erstellt wird.

Was ich nicht herausfinden kann ist, wie wird der Prozess automatisch neu gestartet, und gibt es eine Unterbrechung der Bereitstellung von Webseiten?

Antwort

2

logrotate ausgeführt als ein täglicher Cron-Auftrag wird Protokolldateien in /var/log/nginx/*.log umbenennen. Danach kann nginx kein Fehlerprotokoll oder Zugriffsprotokoll auf die ursprünglichen Protokolldateien ausgeben. (Weitere Informationen finden Sie im @ mata-Kommentar unter dieser Antwort.)

Um dieses Problem zu lösen, sollte das Signal USR1 an nginx gesendet werden, um die Protokolldateien erneut zu öffnen. Deshalb sendet postrotateUSR1 an nginx master, dieses Signal soll nginx nicht töten.

Weitere Einzelheiten zur Steuerung von nginx mit Signalen finden Sie unter this document.

+1

Es ist nicht so, dass es nicht mehr in die Originaldatei schreiben kann, in der Tat würde es weiterhin so tun, solange es noch eine offene Datei hat, ist es egal, dass die Datei umbenannt wurde, deshalb Es muss gesagt werden, dass das alte geschlossen und eine neue Protokolldatei mit dem USR1-Signal geöffnet werden soll. – mata

+0

@mata, ja, deine Beschreibung ist detaillierter :) – xiaochen

+0

Ah. Wenn man den [man] (http://linux.die.net/man/1/kill) liest, sollte der Befehl 'kill -s USR1 ...' sein. Warum wird das '-s' übersprungen? –