如何在主进程未被阻塞时保持Kubernetes吊舱运行?
问题描述:
我有一个后缀pod,我想继续运行只要我有我的整个群集。问题是“开始”的命令:如何在主进程未被阻塞时保持Kubernetes吊舱运行?
postfix start
是非阻塞的,这意味着它一旦退出,因为它成功地触发关闭命令。据我所知,这是启动postfix的唯一方法。
Docker的工作方式是一旦主进程退出,它就会退出容器。因此,当postfix start
返回时,Docker将假定整个容器完成其操作并关闭它,即使此命令触发了其他进程。
如何防止这种情况发生?我能想到的唯一解决方法是postfix start && sleep infinity
,但这看起来很诡异。如果可能,我想避免睡眠无限。有没有其他的方法来启动阻塞的postfix?
答
您需要使用保持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由于某种原因死亡,你的容器会正确停止。
为您的考虑,这将积极消耗CPU时间;一个让步将是'睡觉1;做...' –
是的,我同意。我刚从类似的用例中发布了一个随机脚本来分享一般想法 – whites11