[英]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.