Ich habe einen lang laufenden Prozess, der seine Protokolldatei schreibt stdout
. Ich möchte diese Ausgabe in verschiedenen Dateien speichern, diese Dateien automatisch verwalten (wie das Löschen / Archivieren der alten), ohne den Hauptprozess neu zu starten.
Eine Lösung wäre, die Ausgabe an eine Datei ( process > log.txt
) zu senden und darauf zu verwenden logrotate
, muss aber logrotate
das Programm neu starten, was nicht möglich ist.
Die andere Möglichkeit besteht darin, die Ausgabe an cronolog
( process | cronolog
) weiterzuleiten. In diesem Fall werden ältere Dateien jedoch nicht gelöscht / archiviert, sodass ich ein Programm erstellen muss, das die Wartung für mich übernimmt.
Das Beste wäre, beide Dienstprogramme verwenden zu können, da cronolog
ich den Prozess nicht neu starten muss und logrotate
die alten Protokolldateien genau so pflegen werde, wie ich es möchte. Gibt es eine Möglichkeit, diese beiden Programme miteinander zu arbeiten? Wenn nicht, was ist eine gute Lösung für dieses Problem?
stdout
zum Journal um und das Journal dreht die Protokolle bei Bedarf.Antworten:
Multilog von DJBs Daemontools kann (fast) genau das tun, was Sie verlangen. Der einzige Nachteil, den ich kenne, ist, dass nicht viele Distributionen ein Paket für Daemontools enthalten .
Wenn Sie Ihre Anwendung nicht mit
svc
(Teil der Daemontools) verwalten, müssen Sie einen Weg finden, die Ausgabe an einen Befehl wie zu leitenDies bedeutet:
t
: Einsatz eines tai64n Zeitstempel (die mit zu lesbarer Zeit übersetzt werdentai64nlocal
)s1048576
: Drehen Sie die Protokolldatei, wenn sie auf 1 MB wächstn100
: Bewahren Sie nicht mehr als 100 gedrehte Dateien auf./my_log_directory
: alles, was mit.
oder beginnt/
- schreiben Sie das Protokoll in dieses VerzeichnisDas geschriebene Protokoll hat den Dateinamen
current
. Wenn das Protokoll durch Multilog gedreht wird, wird es in den Namen umbenannt, in@<tai64n timestamp>.s
dem der Dateiname die Zeit angibt, zu der die Datei gedreht wurde. Die Erweiterung kann sein,.s
wenn die Datei sicher geleert wurde oder.u
wenn sie abgeschnitten wurde.Für weitere Informationen überprüfen Sie einfach die Links.
quelle