Irgendwie schreibt der Prozess immer noch in eine Datei, obwohl ich sie umbenannt habe.
Dies wird als Normalbetrieb des Betriebssystems bezeichnet . Sobald die Datei geöffnet ist, ist es für die Prozesse mit dem geöffneten Dateideskriptor egal, welchen Namen die Datei hat oder ob die Datei überhaupt einen Namen hat.
Einfach ausgedrückt, das Protokollierungsschema Ihres Programms (wenn es wirklich das ist, was es ist) ist sophomorisch. Sie erfahren genau, warum es Sophomoric ist. Diese Datei wird für immer wachsen und wachsen, solange das Programm, das das Protokoll generiert, weiter ausgeführt wird, bis der gesamte für den Benutzer zur Verfügung stehende Speicherplatz belegt ist. (Heaven hilft Ihnen, wenn Ihr Programm als Superuser ausgeführt wird.) Wenn Sie die Verknüpfung der Datei aufheben, frisst das Programm den Speicherplatz auf unbestimmte Zeit, da die Datei ohne Namen auf der Disc vorhanden ist, bis der letzte geöffnete Dateideskriptor geschlossen wird. Es ist nicht möglich, die Protokolldatei zu drehen oder die Dateiposition des geöffneten Dateideskriptors von außerhalb des Programms selbst zurückzusetzen. Daher funktioniert auch das Abschneiden nicht, da das Programm weiterhin von seiner letzten Position aus schreibtdiese Person entdeckt .
Sie können jetzt nichts tun, wenn Sie keinen Debugger anhängen, bis das Programm beendet ist. Weisen Sie das Programm das nächste Mal an, sich bei seinem Standardfehler oder seiner Standardausgabe anzumelden, sofern dies überhaupt möglich ist. Dann sendet diese Standardfehler / Standardausgabe über eine Leitung mit einem Programm wie multilog
, multilog
, s6-log
, svlogd
, tinylog
, oder cyclog
. Sie erhalten einen Satz von Protokolldateien, deren Größe begrenzt ist, automatisch zykliert und bei Bedarf drehbar ist.
Eine minderwertige Vorgehensweise beim nächsten Mal ist das Öffnen der Datei im Anfügemodus. Sie müssen das Protokoll kopieren und abschneiden, da das Drehen durch Umbenennen der Datei immer noch nicht funktioniert. Und natürlich besteht die Gefahr, dass Protokolldaten verloren gehen, wie in der logrotate
Manpage beschrieben wird, da sich zwischen dem Erstellen der Kopie und dem Abschneiden der Datei die Gelegenheit ergibt. Im Gegensatz dazu verlieren die oben genannten Protokollierungswerkzeuge keine Protokolldaten an unvorhersehbaren Punkten aufgrund der Protokollrotation durch newsyslog
oder logrotate
(die man nicht benötigt und nicht verwendet). Verwenden Sie sie in Verbindung mit einem Prozess-Supervisor, der die Pipe offen hält, und sie verlieren auch keine Protokolldaten, wenn der Logger neu konfiguriert und neu gestartet wird.