记一次关闭POD无法优雅关闭的问题

问题:
在容器内使用了 dumb-init 启动java进程,之前都是可以响应关闭信号的, 之后有一个需求需要脚本去生成随机数传入java进程中,所以采用脚本去生成并且在脚本内启动java程序,后发现java在关闭的时候居然不响应关闭信号…考虑是启动脚本的问题.根据网上的信息需要修改shell脚本的shebang为#!/usr/bin/dumb-init /bin/sh 即可,但是不知道原因我这边并没有生效.有高人可以帮忙看下
启动脚本:

#!/usr/bin/dumb-init /bin/sh
if [ $WORK_ID ];then
        echo "WORK_ID = $WORK_ID"
        export EXTRA_OPTS=$EXTRA_OPTS' -Dsonli.snowflake.workId='$WORK_ID
else
        echo "WORK_ID IS NOT EXISTS"
fi
if [ $SPUSH_OUT ];then
        echo "SPUSH_OUT = $SPUSH_OUT"
        export EXTRA_OPTS=$EXTRA_OPTS' -Dmqtt.spush.out.spushOutClientId=GID_'$SPUSH_OUT_ENV'_solitech@@@spush-out-client-0'$WORK_ID
else
        echo "SPUSH_OUT IS NOT EXISTS"
fi
if [ $DATA_CENTER_ID ];then
        echo "DATA_CENTER_ID = $DATA_CENTER_ID"
        export EXTRA_OPTS=$EXTRA_OPTS' -Dsonli.snowflake.dataCenterId='$DATA_CENTER_ID
else
        echo "DATA_CENTER_ID IS NOT EXISTS"
fi
java ${AGENT} ${JAVA_OPTS} ${SPRING_OPTS} ${DEBUG_OPTS} ${EXTRA_OPTS} org.springframework.boot.loader.JarLauncher

Dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/sonli-public/jdk-alpine-8u301:v2 as builder
WORKDIR application
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract
FROM registry.cn-hangzhou.aliyuncs.com/sonli-public/jdk-alpine-8u301:v2
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-dependencies/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/sonli-dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/application/ ./
COPY start-server.sh ./
RUN echo "jmap -dump:format=b,file=/root/\$1 \$(ps -ef | grep "java" | grep ali_ | grep -v grep | awk '{print \$1}')" > /root/dump.sh && chmod +x /root/dump.sh
RUN echo "jstack -l \$(ps -ef | grep "java" | grep ali_ | grep -v grep | awk '{print \$1}') >> /root/\$1 " > /root/jstackfile.sh && chmod +x /root/jstackfile.sh
ENV JAVA_OPTS="-Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M"
ENV SPRING_OPTS=""
ENV DEBUG_OPTS=""
ENV DUMB_INIT_SETSID=
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
CMD ["/application/start-server.sh"]

但是这个方法在我这里没生效.
我使用的是在脚本内使用 exec 来提升子进程到PID进程下,即可…
最后的启动脚本为

#!/bin/sh
if [ $WORK_ID ];then
        echo "WORK_ID = $WORK_ID"
        export EXTRA_OPTS=$EXTRA_OPTS' -Dsonli.snowflake.workId='$WORK_ID
else
        echo "WORK_ID IS NOT EXISTS"
fi
if [ $SPUSH_OUT ];then
        echo "SPUSH_OUT = $SPUSH_OUT"
        export EXTRA_OPTS=$EXTRA_OPTS' -Dmqtt.spush.out.spushOutClientId=GID_'$SPUSH_OUT_ENV'_solitech@@@spush-out-client-0'$WORK_ID
else
        echo "SPUSH_OUT IS NOT EXISTS"
fi
if [ $DATA_CENTER_ID ];then
        echo "DATA_CENTER_ID = $DATA_CENTER_ID"
        export EXTRA_OPTS=$EXTRA_OPTS' -Dsonli.snowflake.dataCenterId='$DATA_CENTER_ID
else
        echo "DATA_CENTER_ID IS NOT EXISTS"
fi
echo 启动参数JAVA_OPTS=$JAVA_OPTS
echo SPRING参数SPRING_OPTS=$SPRING_OPTS
echo DEBUG参数DEBUG_OPTS=$DEBUG_OPTS
echo 额外参数EXTRA_OPTS=$EXTRA_OPTS
echo AGENT参数AGENT=$AGENT
exec java ${AGENT} ${JAVA_OPTS} ${SPRING_OPTS} ${DEBUG_OPTS} ${EXTRA_OPTS} org.springframework.boot.loader.JarLauncher
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值