2017-09-07 2 views
0

私は私の全体のクラスターを持っている限り、私が走り続けるポストフィックスポッドを持っています。メインプロセスがブロックしていないときにKubernetesポッドを稼働させ続けるには?

postfix start

は、それが正常にコマンドをオフに発射すると、それは、すぐに終了を意味し、非ブロッキングである:問題は、コマンドを「開始」ということです。私が知る限り、これはpostfixを開始する唯一の方法です。

Dockerの仕組みは、メインプロセスが終了するとただちにコンテナを終了することです。したがって、postfix startが返ってくると、Dockerはこのコマンドが他のプロセスを起動したにもかかわらず、コンテナ全体が処理を完了して終了したとみなします。

これを防ぐにはどうすればよいですか?私が考えることができる唯一の回避策はpostfix start && sleep infinityですが、これはハッキーと奇妙なようです。私は可能な限り睡眠無限を避けたいです。ブロックしているpostfixを起動する別の方法はありますか?

答えて

0

postfix startコマンドの後にフォアグラウンドを維持し続けるカスタムCMDスクリプトを使用する必要があります。

たとえば、あなたはこの1つを使用することができ、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プロセスが起動するまで、whileループを実行し続け、それはプロセスの終了時に終了します。ポストフィックスが何らかの理由で死ぬと、この方法でコンテナを正しく停止させることができます。

+0

これは、CPU時間を積極的に消費します。譲歩は「睡眠1」である。 do ... ... –

+0

はい私は同意します。同様の使用事例からランダムなスクリプトを投稿して一般的なアイデアを共有しました – whites11

関連する問題