2017-09-07 1 views
0

Ich habe einen Postfix-Pod, den ich so lange ausführen möchte, wie ich meinen ganzen Cluster habe. Das Problem ist, dass der Befehl „Start“:Wie wird ein Kubernetes-Pod ausgeführt, wenn der Hauptprozess nicht blockiert?

postfix start

ist nicht blockierend, was bedeutet, es so schnell beendet, wie es erfolgreich den Befehl feuert. Soweit ich weiß, ist dies die einzige Möglichkeit, Postfix zu starten.

Die Funktionsweise von Docker ist, dass es den Container verlässt, sobald der Hauptprozess beendet wird. Wenn postfix start zurückkehrt, nimmt Docker an, dass der gesamte Container fertig ist und schließt, obwohl dieser Befehl andere Prozesse ausgelöst hat.

Wie verhindere ich dies? Die einzige Problemumgehung, die ich mir vorstellen kann, ist postfix start && sleep infinity, aber das scheint hacky und komisch. Ich möchte eine Schlafunendlichkeit möglichst vermeiden. Gibt es eine alternative Möglichkeit, Postfix zu starten, das blockiert?

Antwort

0

Sie müssen ein benutzerdefiniertes CMD-Skript verwenden, das nach dem Befehl postfix start im Vordergrund bleibt.

Zum Beispiel können Sie diese benutzen, nahm von here:

#!/bin/bash 

# Wait before postfix is really started. 

function get_state { 
    echo $(script -c 'postfix status' | grep postfix/postfix-script) 
} 

postfix start 
echo $(get_state) 

while true; do 
    state=$(get_state) 
    if [[ "$state" != "${state/is running/}" ]]; then 
     PID=${state//[^0-9]/} 
     if [[ -z $PID ]]; then 
      continue 
     fi 
     if [[ ! -d "/proc/$PID" ]]; then 
      echo "Postfix proces $PID does not exist." 
      break 
     fi 
    else 
     echo "Postfix is not running." 
     break 
    fi 
done 

Dieses Skript hält eine while-Schleife ausgeführt wird, bis der postfix Prozess ist, und es tritt aus, wenn der Prozess beendet wird. Auf diese Weise wird Ihr Container korrekt gestoppt, wenn Postfix aus irgendeinem Grund abstirbt.

+0

für Ihre Überlegung, das wird die CPU-Zeit positiv brennen; eine Konzession wäre "während Schlaf 1; tun ... ' –

+0

Ja stimme ich zu. Ich habe gerade ein zufälliges Skript aus einem ähnlichen Anwendungsfall gepostet, um die allgemeine Idee zu teilen – whites11

Verwandte Themen