2017-09-07 6 views
0

전 전체 클러스터를 가지고있는 한 계속 실행하고 싶은 postfix 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 

이 스크립트는 후위 처리가 될 때까지 while 루프를 계속 실행하고,이 때 프로세스 종료를 종료합니다. 어떤 이유로 postfix가 죽으면 컨테이너를 올바르게 정지시킬 수 있습니다.

+0

귀하의 검토를 위해, 그것은 긍정적 인 CPU 시간을 구울 것입니다; 양보는'sleep 1 동안; do ... ... ' –

+0

예, 동의합니다. 방금 비슷한 사용 사례에서 임의의 스크립트를 게시하여 일반적인 아이디어를 공유했습니다. – whites11