2017-09-07 31 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

相关问题