Verwenden von Supervisord zur Steuerung des Postfix-MTA

3176
alephnull

Ich versuche Supervisord zur Kontrolle von Postfix zu verwenden. Die übliche Methode ist die Angabe eines Befehls, der den Daemon startet, den ich verwende postfix -c /etc/postfix start. Die Postfix-Manpage besagt, dass Sie startmit stopdem obigen Befehl das Ersetzen durch beenden möchten.

Ich sehe keine Möglichkeit, einen anderen Befehl zum Stoppen eines Daemons anzugeben, nur ein Signal. Die masterManpage sagt, dass das TERMSignal so funktioniert, als ob postfix abortes benutzt wurde, aber es ist still, wenn es ordnungsgemäß durch ein Signal heruntergefahren wird.

Auch die Start / Stopp-Methode des ersten Absatzes ist für den Supervisor schwierig. Das Skript führt eine Reihe von Prüfungen und ruft dann master, qmgrund pickupmit masterals Prozessgruppenleiter. Supervisord hat also ein Handle für eine nutzlose PID (eine, unter der das Skript ausgeführt wurde) und kann diese PID daher nicht verwenden, um den Dämon zu stoppen. Was es im Griff haben sollte, ist der masterProzess.

Wie weit bin ich gekommen:

[program:master] process_name = master priority = 5 directory = /etc/postfix command = /usr/sbin/postfix -c /etc/postfix start startsecs = 0 user = root stopsignal = INT 

Dies startet Postfix, kann aber nicht angehalten werden.

4

3 Antworten auf die Frage

4
Hui Zheng

Meine Lösung ist, ein Wrapper-Skript namens postfix.sh wie folgt zu schreiben:

# call "postfix stop" when exiting trap "{ echo Stopping postfix; /usr/sbin/postfix stop; exit 0; }" EXIT  # start postfix /usr/sbin/postfix -c /etc/postfix start # avoid exiting sleep infinity  

Ändern Sie danach supervisord.conf:

[program:postfix] command=path/to/postfix.sh  
1
alephnull

Es stellt sich heraus, dass es einfacher ist, Monit zu verwenden, um Daemons zu überwachen:

Monit ist ein kostenloses Open Source-Dienstprogramm zur Verwaltung und Überwachung von Prozessen, Programmen, Dateien, Verzeichnissen und Dateisystemen auf einem UNIX-System. Monit führt automatische Wartungs- und Reparaturarbeiten durch und kann in Fehlersituationen sinnvolle kausale Aktionen ausführen.

Mit Monit können Sie Daemon-Prozesse oder ähnliche Programme überwachen, die auf localhost ausgeführt werden. Monit ist besonders nützlich für die Überwachung von Daemon-Prozessen, z. B. beim Starten des Systems von /etc/init.d/. Zum Beispiel sendmail, sshd, apache und mysql.

enter image description here

1
Ivailo Bardarov

Das Gleiche wie @Hui Zheng, aber prüfen, ob Posfix lebt

trap "postfix stop" SIGINT trap "postfix stop" SIGTERM trap "postfix reload" SIGHUP  # force new copy of hosts there (otherwise links could be outdated) cp /etc/hosts /var/spool/postfix/etc/hosts  # start postfix postfix start  # lets give postfix some time to start sleep 3  # wait until postfix is dead (triggered by trap) while kill -0 "`cat /var/spool/postfix/pid/master.pid`"; do sleep 5 done 

Credits gehen hier