主进程没有被阻塞时如何保持Kubernetes pod运行?

我有一个后缀pod,我想保持运行,只要我有我的整个群集。 问题是,“开始”命令:

postfix start

是非阻塞的,意味着它一旦成功发射命令就立即退出。 据我所知,这是启动postfix的唯一方法。

Docker的工作方式是一旦主进程退出,它就会退出容器。 所以,当postfix start返回的时候,Docker会假设整个容器完成了它的事情并closures它,即使这个命令触发了其他进程。

我如何防止这种情况发生? 我能想到的唯一解决方法是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循环,直到postfix进程结束,并在进程退出时退出。 这样你就可以正确地停止你的容器,如果postfix由于某种原因死亡的话。