Wir führen derzeit ein Upgrade von Ubuntu 12.04 LTS auf 14.04 LTS auf unseren Ruby-on-Rails-Anwendungsservern durch und haben festgestellt, dass die Protokolldateien nicht mehr rotieren.
Auf beiden Rechnern haben wir eine Datei /var/app-name/config/logrotate
unseres Unix-Benutzers, deployer
die eine gültige Logrotate-Datei wie folgt enthält:
/var/app-name/log/*.log {
daily
rotate 365
delaycompress
compress
dateext
dateformat -%Y%m%d
missingok
copytruncate
}
Dies wird dann in das /etc/logrotate.d/
Verzeichnis als symbolisiertapp-name
Auf unserem Ubuntu 12.04 Server haben wir Logrotate 3.7.8, das einwandfrei läuft. Es geht in das var/app-name/log/
Verzeichnis und dreht alle aus Protokolldateien
Aber auf dem Ubuntu 14.04 Server haben wir Logrotate 3.8.7, das die Logfiles für unsere Anwendung nicht dreht.
Wenn ich das über debugge sudo logrotate -d -f /etc/logrotate/.conf
debugge, erhalte ich die folgende Ausgabe:
Ignoring /etc/logrotate.d/app-name because the file owner is wrong (should be root).
Dem Code nach zu urteilen, scheint diese Änderung für den Release-Stream 3.8.x hinzugefügt worden zu sein: https://github.com/demands/logrotate/commit/b8ce386a969c60e5c8ee78023c24a1ba0aab1526
Wenn ich den Besitzer der Datei ändere, auf die ein Link verweist /var/app-name/config/logrotate
aufroot
, funktioniert sie wieder. Da diese Datei jedoch Teil meiner Anwendung ist und mit dem Capistrano-Bereitstellungsframework erstellt wurde, das wir in diesem Zustand verwenden, möchte ich lieber nicht den Besitz ändern, wenn es früher einwandfrei funktioniert hat.
Werden symbolisch verknüpfte Konfigurationsdateien von logrotate empfohlen / unterstützt?
Und wenn ja, sollte es deployer
abgelehnt werden, meine Datei (im Besitz von ) zu verwenden, die mit dem Symbol verknüpft ist/etc/logrotate.d
Verzeichnis ist, als Fehler angesehen werden?
Oder gibt es einen anderen empfohlenen Ansatz für die anwendungsspezifische Protokollrotation?
(auch bei Unix StackExchange gefragt )
quelle
Antworten:
Das Problem ist, dass eine logrotate-Konfigurationsdatei jeden Befehl als root ausführen kann (mit Zeilengruppen vor / nach dem Drehen). Aus diesem Grund würden Sie Ihrem
deployer
Benutzer effektiv Root-Rechte gewähren, indem Sie ihm Schreibzugriff auf Dateien in gewähren/etc/logrotate.d/
. Also nein, es ist kein Fehler.Wenn Sie Ihrem Deployer-Benutzer vertrauen, können Sie das Problem vermutlich lösen, indem Sie ihm Sudo-Rechte zum Kopieren von Dateien erteilen
/etc/logrotate.d/
. Vorausgesetzt natürlich, der Deployer-Benutzer ist nicht derselbe Benutzer, als der die Web-App ausgeführt wird.quelle
Mir ist klar, dass ich zu spät zur Party komme, aber ich hatte ein ähnliches Problem und dachte, ich würde meine Lösung teilen.
Meine Probleme begannen, als
logrotate
ich die von mir geschriebene Konfiguration nicht lesen konnte. Ich wollte keine neuen Konfigurationen in einem Ordner bereitstellen, der root gehört, da der Bereitstellungsbenutzer keinen Rootzugriff auf irgendetwas haben soll .Zuerst habe ich versucht,
logrotate
als Bereitstellungsbenutzer auszuführen , aber er hat sich über den Zugriff auf die Statusdatei unter beschwert/var/lib/logrotate/state
. Dann habe ich die Manpage gelesen. Sie können die verwendete Statusdatei angebenlogrotate
! Daher schien es mir eine bessere Lösung zu sein, einen täglichen Cron für die Ausführung einzurichtenlogrotate
als Bereitstellungsbenutzer mit einer benutzerdefinierten Statusdatei ausgeführt wird. Auf diese Weise benötigt der Bereitstellungsbenutzer oder die Anwendung keinen Root-Zugriff.So legen Sie die Statusdatei fest:
Jetzt können Sie logrotate als jeder Benutzer und Konfigurationseigentümer ausführen, den Sie mögen!
quelle