Verzögerter Start von Postfix und Dovecot wegen NFS mount

digidax

New Member
Hallo zusammen,

ich habe einen virtuellen Container, in welchem Postfix und Dovecot laufen. Das Maildir wird in dem CT per NFS mount (fstab) eingebunden.
OS ist Centos 7, als init system läuft systemd.

Während des Hochfahrens des Contrainers ist mir nun aufgefallen, dass Postfix und Dovecot schon hochgefahren sind, das NFS mount aber noch nicht eingebunden ist.
Dovecot meckert natürlich, weil es keinen Zugriff auf das maildir hat.

In den Startscripten gib es für Postfix und Dovecot die Möglichkeit, mittels "ExecStartPre" Startbedingungen vorzugeben.
Bei Dovecot z.B. in der verlinkten Datei /usr/libexec/dovecot/prestartscript:

Code:
#!/bin/sh
/bin/systemctl -q is-enabled NetworkManager.service >/dev/null 2>&1 && /usr/bin/nm-online -q --timeout 30 ||:
Es wird also geprüft, ob das Netzwerk hochgefahren ist, wenn nicht immerhalb von 30 sec. dann Timeout und somit kein Start, vermute ich mal.

Nun die Frage, weiß Jemand, ob man so auch prüfen kann, ob das Maildir verfügbar ist? Man könnte ja im NFS Storage eine Dummy Datei /srv/mail/mail_storage/this_is_storage hinterlegen und prüfen, ob diese existiert. Wenn der mount aktiv ist, dann wäre sie da, wenn nicht, dann 30 sec warten und abbrechen.

Kann mir da bitte jemande helfen?

viel Grüße,
Frank
 

maltris

Member
Du kannst das realisieren, indem du dem Postfix- und dem Dovecot-Unit folgendes mitgibst:

After=name.mount

Mittels

systemctl list-units --type=mount

kannst du dir die verfügbaren "mount"-Units anzeigen lassen.

Wichtig wäre noch, dass du, sofern die Units bereits andere "After=" Settings haben, diese nicht verwirfst sondern alle, durch Leerzeichen getrennt, hinter "After=" schreibst. Auch denkbar wäre das mit einem Drop-In zu lösen, um zu vermeiden, dass später durch Updates o. ä. deine Änderungen überschrieben werden[1].

[1] https://wiki.archlinux.org/index.php/Systemd#Drop-in_files
 

digidax

New Member
Sorry für die verzögerte Antwort, war im Urlaub.

Ich hab das so gelöst, bei [Service] folgende Zeilen eingefügt:

Code:
ExecStartPre=/usr/bin/test -f /srv/mail/mail_storage/this_is_storage
Restart=on-failure
RestartSec=5
Die erste Zeile prüft, ob die Datei "this_is_storage" existiert, dies wäre nur, wenn der Mount erfolgreich ist.
Zeile 2 und 3 bewirkt, dass im Fehlerfall aller 5 Sekunden erneut die Bedingung im Zeile 1 geprüft wird.
Erst wenn die Datei existiert, wird Dovecot gestartet, gleiches auch mit Postfix, da mir dort schon Mal der Mountpoint voll gemacht wurde, ohne dass Storage verfügbar war.
 
Top