繁体   English   中英

当主进程未阻塞时如何保持Kubernetes Pod运行?

[英]How to keep a Kubernetes pod running when main process is not blocking?

我有一个Postfix Pod,只要我整个集群都安装了它,就可以继续运行。 问题是“开始”命令:

postfix start

是非阻塞的,这意味着它在成功触发命令后立即退出。 据我所知,这是启动后缀的唯一方法。

Docker的工作方式是,一旦主进程退出,它将立即退出容器。 因此,当postfix start返回时,即使该命令触发了其他进程,Docker也会假设整个容器已完成其工作并关闭它。

如何防止这种情况发生? 我能想到的唯一解决方法是postfix start && sleep infinity但这似乎很怪异和奇怪。 如果可能,我想避免无限睡眠。 有没有其他方法可以阻止启动后缀?

您需要使用自定义CMD脚本,该脚本在postfix start命令之后始终保持在前台。

例如,您可以使用从此处获取的该代码

#!/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循环,直到后缀进程启动为止,并且在该进程退出时退出。 这样,如果后缀死于任何原因,您将使容器正确停止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM