Ich habe die /var/log/mail
Datei versehentlich gelöscht . Bis zu diesem Zeitpunkt konnte ich es mit Postfix-Sachen überwachen. Nun scheint es, dass Postfix seine Protokolle nicht an sendet /var/log/mail
, da die Datei nicht mit neuen Protokollnachrichten aktualisiert wird.
10
Auch nach dem Erstellen einer leeren Datei
Sie müssen das Syslog neu starten
und dann ist es Protokollierungsgewinn :)
quelle
Dies ist ein Fehler in Syslog, zeigt jedoch ein häufiges Problem, wenn eine Datei gelöscht wird, während sie von einem Programm geöffnet wird. Wenn Sie ein "rm" ausführen, entfernen Sie einen Verzeichniseintrag, aber Sie entfernen NICHT die zugrunde liegende Datei. Das Betriebssystem zählt die Verweise auf die Datei und löscht die zugrunde liegenden Dateidaten erst, wenn die Referenzanzahl auf Null geht. Bei einer durchschnittlichen Datei beträgt der Referenzzähler der ungeöffneten Datei eins (der Verzeichniseintrag). Wenn die Datei geöffnet wird, wird die Anzahl auf zwei erhöht. Wenn ein zweites Programm dieselbe Datei öffnet, wird die Anzahl auf drei erhöht. Wenn der Verzeichniseintrag jetzt gelöscht wird, wird die Anzahl auf zwei dekrementiert - was bedeutet, dass die Datei anomal ist (keinen Namen hat).
Wenn Sie / var / log / mail löschen, hat der Systemlogger die Datei noch zum Schreiben geöffnet. Wenn Sie ein neues / var / log / mail erstellen, verweist es auf eine andere Datei als die, die der Systemlogger gerade schreibt. Die einzige Möglichkeit, alles konsistent zu machen, besteht darin, den Systemlogger neu zu starten. Wenn der ursprüngliche Systemprotokollierer beendet wird, werden alle ihm zugeordneten Dateien geschlossen - einschließlich des anonymen E-Mail-Protokolls, dessen Verzeichniseintrag Sie gelöscht haben. Wenn Sie den Systemprotokollierer neu starten, wird er / var / log / mail erneut geöffnet, wenn eine Protokollnachricht geschrieben werden muss, und danach geöffnet.
Eine andere Möglichkeit, die häufig entdeckt wird, besteht darin, dass ein laufendes Programm die gesamte Festplatte mit Dateidaten füllt. Der Benutzer löscht die sehr große Datei, aber der Speicherplatz wird nicht freigegeben, da die Datei noch vorhanden ist und Speicherplatz belegt, der Verzeichniseintrag jedoch entfernt wurde. Wenn das Programm beendet wird (entweder weil der Benutzer es beendet hat oder weil es sich selbst beendet hat), wird der Speicherplatz wiederhergestellt, da der Referenzzähler in der Datei auf Null gegangen ist.
Um dies zu verhindern, schreibt der Protokollierer möglicherweise zuerst die Protokollnachricht, überprüft, ob der Verzeichniseintrag für die Protokolldatei vorhanden ist, und schließt die ursprüngliche Protokolldatei, öffnet eine neue und schreibt sie dann neu Nachricht - damit die Nachricht nicht verloren geht. All dies zu tun, würde jedoch viel mehr Komplexität erfordern, als der Systemlogger haben sollte - für jede Nachricht, die er schreibt, dauert das Schreiben aufgrund der zusätzlichen Verzeichnisprüfung etwas länger -, was jedes Mal erfolgreich ist, wenn die Datei vorhanden ist NICHT gelöscht worden.
Um all das besser zu verstehen, ist der folgende Befehl aufschlussreich, da er den Systemaufruf beschreibt, der das Entfernen des Verzeichniseintrags und das Referenzdekrement durchführt: "man 3 unlink"
quelle
Das ist nicht das Problem unter CentOS 7. Jemand hielt es für eine großartige Idee, die Postfix-Mail-Protokolle über den Journaler zu führen. Wenn Sie Postfix-Protokolle anzeigen möchten:
(um das ganze Protokoll zu sehen)
(um das Protokoll zu verfolgen)
Möglicherweise benötigen Sie auch in der main.cf für Postfix
quelle
journalctl --vacuum-time=1d
fwiw neuere Versionen von Postfix-Protokoll zu
/var/log/mail.log
und ich musste auch ausführensudo chmod a+w /var/log/mail*
undservice postfix restart
meine Postfix-Protokolle nach dem Löschen zurückbekommenquelle