2017-09-07 118 views
0

我有一個後綴pod,我想繼續運行只要我有我的整個羣集。問題是「開始」的命令:如何在主進程未被阻塞時保持Kubernetes吊艙運行?

postfix start

是非阻塞的,這意味着它一旦退出,因爲它成功地觸發關閉命令。據我所知,這是啓動postfix的唯一方法。

Docker的工作方式是一旦主進程退出,它就會退出容器。因此,當postfix start返回時,Docker將假定整個容器完成其操作並關閉它,即使此命令觸發了其他進程。

如何防止這種情況發生?我能想到的唯一解決方法是postfix start && sleep infinity,但這看起來很詭異。如果可能,我想避免睡眠無限。有沒有其他的方法來啓動阻塞的postfix?

回答

0

您需要使用保持postfix start命令後留在前臺定製的CMD腳本。

例如,你可以使用這一個,從花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 

該腳本繼續運行一段時間循環,直到後綴過程了,它退出進程退出時。這樣,如果Postfix由於某種原因死亡,你的容器會正確停止。

+0

爲您的考慮,這將積極消耗CPU時間;一個讓步將是'睡覺1;做...' –

+0

是的,我同意。我剛從類似的用例中發佈了一個隨機腳本來分享一般想法 – whites11

相關問題