Wir verwenden Upstart, um unsere Dienste auf unseren Ubuntu-Servern zu verwalten. Sie erstellen Protokolle, die in /var/log/upstart/SERVICE_NAME.log abgemeldet werden
Dann werden die Protokolldateien täglich mithilfe des Protokollrotationsskripts gedreht, das mit 12.04 LTS geliefert wird:
/var/log/upstart/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
}
Das Problem ist, dass logrotate die Dateien zwar verschiebt, aber kein Signal für einen Neustart zum Schließen und erneuten Öffnen der Dateien zu sein scheint, sodass der Startvorgang in eine Lösch-PID geschrieben wird.
init 1 root 8w REG 202,1 64 2431 /var/log/upstart/dbus.log.1 (deleted)
init 1 root 13w REG 202,1 95 2507 /var/log/upstart/acpid.log.1 (deleted)
init 1 root 14w REG 202,1 127 17377 /var/log/upstart/whoopsie.log.1 (deleted)
init 1 root 36w REG 202,1 122 6747 /var/log/upstart/SERVICE_NAME.log.1 (deleted)
init 1 root 37w REG 202,1 30 6762
Natürlich könnte ich die Ausgabe meiner eigenen Dienste auf andere Protokolldateien umleiten, aber das Problem wäre immer noch für die Systemprozesse vorhanden. Außerdem möchte ich lieber nicht mehr Infrastruktur aufbauen als ich brauche.
nocreate
Richtlinie, nicht sicher, warum jemand diese Richtlinie verwenden würde, insbesondere für Dienste, die möglicherweise eine Menge Ausgabe schreiben könntenAntworten:
Ich glaube, Sie haben 3 Möglichkeiten.
Sie ändern die vorhandene Konfiguration, indem Sie "copytruncate" hinzufügen.
/var/log/upstart/*.log { copytruncate daily missingok rotate 7 compress notifempty nocreate }
Wenn Sie die vorhandene logrotate-Konfiguration aufgrund anderer Protokolldateien, die nicht betroffen sind und die vorhandene Konfiguration für sie funktioniert, nicht ändern können oder dürfen, verschieben Sie Ihre "SERVICE_NAME.log" -Dateien in einen neuen Ordner unter / var / log, wenn Sie möchten, erstellen Sie eine neue Konfiguration mit "copytruncate" und fügen Sie sie der cron.daily hinzu.
a) Wenn Sie die Konfiguration des Host-Betriebssystems nicht ändern oder cron.daily des Host-Betriebssystems hinzufügen dürfen, besteht Ihre dritte Option darin, die Skripte oder Programme zu ändern, um zu überprüfen, ob die Datei vorhanden ist, bevor Sie in die Datei schreiben. b) Eine andere Möglichkeit ist ein Punkt von Punkt 2, bei dem Sie Ihre Protokolldateien an einen anderen Ort verschieben und in Ihrem Skript oder Programm den für die Protokolldatei dieses Programms spezifischen Befehl logrotate ausführen.
Punkt 3b oben ist kniffliger, aber eleganter und wird meistens verwendet, da das Programm autark und selbstverwaltet ist und nicht die Jobs des Betriebssystems benötigt, um es zu babysitten.
Um herauszufinden, wie Sie logrotate manuell ausführen und Ihrem Programm oder Skript hinzufügen können, geben Sie einfach Folgendes ein:
oder
Wenn Sie Python für Ihre Programme verwenden, können Sie überprüfen, wie dieses Programm es verwendet, um seine Protokolldateien selbst zu verwalten. http://bazaar.launchpad.net/~ferncasado/keep.awake/trunk/files/head:/v4/
quelle
Es stellt sich heraus, dass dies ein bekanntes Problem ist und das Ticket während der Eingabe offen bleibt.
Das Richtige ist wahrscheinlich, einfach das Ganze zu entfernen
/etc/logrotate.d/upstart
und die Dateien der einzelnen Dienste einzeln zu drehen. Da das Verzeichnis (/var/log/upstart/
) nur das stdout / stderr der verschiedenen Dienste enthält - und kein Dienst, der als Daemon ausgeführt werden soll, sollte überhaupt auf diesen beiden Kanälen ausgegeben werden. Außer vielleicht gleich beim Start.Auf den Systemen ich die Verwaltung werden drei Dienste von Emporkömmling aus:
php5.6-fpm
,php7.1-fpm
, undacpid
. Keines der drei Protokolle ist aktiv, aber manchmal wird die fpm neu gestartet, weil die Hauptprotokolldatei (/var/log/php5.6-fpm.log
) gedreht wird - und dies verursacht dieses Rauschen, da es beim Start etwas Irrtum ausgibt.Wenn Sie trotzdem darauf bestehen, diese Dateien zu drehen, können Sie sich darauf verlassen, dass ihre Namen mit den Namen der Dienste übereinstimmen, und das folgende
postrotate
Skript verwenden:Damit dies funktioniert, sollten Sie das darin enthaltene Verb nicht verwenden.
Mein Scriptlet basiert auf der Tatsache, dass der tatsächliche Pfad zur Datei als erstes Argument an sie übergeben wird (sharedscripts
$1
).(Die Umleitung in
/dev/null
ist nützlich, weilservice
-command ist laut -. Und Sie nicht wollen , ein solches Rauschen E-Mail an Sie von cron Hinweis, dass ich nicht umleitenstderr
dort, nurstdout
- wenn es ein Problem gibt , Sie Ich werde immer noch deine E-Mail darüber bekommen.)quelle