Postfix/BerkeleyDB: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
K Textersetzung - „Kategorie:Entwurf“ durch „“ |
||
Zeile 43: | Zeile 43: | ||
Der Befehl „make“ aktualisiert nur die Dateien, die sich geändert haben. | Der Befehl „make“ aktualisiert nur die Dateien, die sich geändert haben. | ||
* Im Falle eines Fehlers stoppt der Befehl "make" und wird nicht aufgerufen den "mv"-Befehl, damit Postfix die vorhandene weiterhin verwendet Datenbankdatei, als ob nichts passiert wäre. | * Im Falle eines Fehlers stoppt der Befehl "make" und wird nicht aufgerufen den "mv"-Befehl, damit Postfix die vorhandene weiterhin verwendet Datenbankdatei, als ob nichts passiert wäre. | ||
[[Kategorie:Postfix:Architektur]] | [[Kategorie:Postfix:Architektur]] |
Version vom 17. Februar 2023, 13:59 Uhr
Berkeley DB-Dateien sicher aktualisieren
Postfix verwendet Dateisperren, um Zugriffskonflikte zu vermeiden Aktualisieren von Berkeley DB oder anderen lokalen Datenbankdateien.
- Früher war das so sicher sein, aber wie Berkeley DB entwickelt hat, um aggressiver zu verwenden Caching, Dateisperrung möglicherweise nicht mehr ausreichend.
Darüber hinaus würde das Sperren von Dateien keine Probleme verhindern, wenn die Update schlägt fehl, weil die Festplatte voll ist oder etwas anderes verursacht a Datenbankaktualisierung fehlschlägt.
- Insbesondere Befehle wie postmap(1) oder postalias(1) vorhandene Dateien überschreiben.
- Wenn das überschreiben Scheitert mittendrin dann hast du keine brauchbare Datenbank und Postfix wird aufhören zu arbeiten.
- Dies ist kein Problem mit dem CDB-Datenbanktyp ab Postfix 2.2 verfügbar: CDB erstellt eine neue Datei und benennt die Datei nach erfolgreichem Abschluss um.
Bei Berkeley DB und anderen "Ein-Datei"-Datenbanken ist es das Es ist möglich, zusätzliche Robustheit hinzuzufügen, indem Sie "mv" für REPLACE an verwenden vorhandene Datenbankdatei, anstatt sie zu überschreiben:
# postmap access.in && mv access.in.db access.db
Dadurch wird die Eingabedatei „access.in“ in die Ausgabedatei umgewandelt „access.in.db“ und ersetzt die Datei „access.db“ nur dann, wenn die postmap(1) -Befehl war erfolgreich.
- Natürlich solche Befehle eingeben wird schnell langweilig, und deshalb verwenden die Leute stattdessen "make", Wie nachfolgend dargestellt.
- Benutzereingaben werden fett dargestellt.
# cat Makefile all: aliases.db access.db virtual.db ...usw....
# Hinweis 1: Befehle werden nach einem TAB-Zeichen angegeben. # Anmerkung 2: Verwenden Sie postalias(1) für lokale Aliase, postmap(1) für den Rest. aliases.db: aliases.in Postalias aliases.in mv aliases.in.db aliases.db
access.db: access.in postmap-Zugriff.in mv access.in.db access.db
virtual.db: virtual.in postmap virtual.in mv virtual.in.db virtual.db
...und so weiter... # vi access.in ...Bearbeitungssitzung nicht angezeigt... # machen postmap-Zugriff.in mv access.in.db access.db #
Der Befehl „make“ aktualisiert nur die Dateien, die sich geändert haben.
- Im Falle eines Fehlers stoppt der Befehl "make" und wird nicht aufgerufen den "mv"-Befehl, damit Postfix die vorhandene weiterhin verwendet Datenbankdatei, als ob nichts passiert wäre.