
Ich habe ein Beispiel für die Protokollrotation in Nginx gefundenHier
Aber ein einfacher Test mit:
set $date "2018-08-24";
access_log /home/tim/log/access-http-$date.log default;
erzeugt eine Protokolldatei mit dem Namen access-http-.log
. Ich verwende nginx 1.13.6 (mit OpenResty).
Aktualisieren
Nach viel Hacken und Optimieren habe ich das folgende Logrotate-Skript entwickelt, um die verschiedenen von nginx erstellten Protokolldateien zu rotieren. Ich habe es in /etc/logrotate abgelegt. Das verbleibende Problem ist, dass die Protokolle nicht täglich rotieren (ich bin mir derzeit nicht sicher, warum), aber logrotate -f <filename>
genau das gewünschte Ergebnis erzeugt.
Ein interessanter Hinweis ist, dass es nginx -s reload
anstelle von USR1 verwendet werden kann. Leider wird dies auf der Protokollierungsseite von Nginx nicht erwähnt, aber ich habe es gefunden (in der Manpage, wenn ich mich recht erinnere). Ich erstelle OpenResty/Nginx manuell, um zusätzliche Module zu integrieren, die ich brauche, sodass ich nicht die verschiedenen Extras bekomme, die in der gepackten Version enthalten sind, wie z. B. die PID-Verwaltung.
/path/to/log/access-http.log /path/to/log/access-https.log /path/to/log/api.log /path/to/log/error.log {
daily
missingok
notifempty
create 664 nobody tim
dateext
dateformat -%Y-%m-%d
dateyesterday
rotate 10
su tim tim
postrotate
/usr/local/bin/openresty -s reload
endscript
}
Ich denke, das ist für jeden nützlich, der eine große Nginx-Konfiguration hat, die sowohl Webseiten als auch eine API bedient. Ich halte das HTTP getrennt, da ich keine Nicht-HTTPS-Seiten bediene und es den Script-Kiddie-Mist aus meinen Seitenprotokollen fernhält.
Antwort1
Legen Sie einfach eine Cron-Aufgabe für eine Minute vor Mitternacht fest, um die Protokolldatei zu verschieben, sie mit dem Datum umzubenennen und dann ein USR1-Signal an Nginx zu senden. Dadurch wird Nginx dazu veranlasst, die Protokolldateien erneut zu öffnen und eine neue für den nächsten Tag zu erstellen.
59 23 * * * mv /var/log/nginx/access.log /var/log/nginx/$(date +%F).access.log && kill -USR1 $(cat /run/nginx.pid)