

k8s中shell脚本启动如何传递信号
source link: https://qingwave.github.io/docker-shell-signal/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Feb 3, 2021 · cloud
k8s中shell脚本启动如何传递信号
在 k8s 或 docker 中,有时候我们需要通过 shell 来启动程序,但是默认 shell 不会传递信号(sigterm)给子进程,当在 pod 终止时应用无法优雅退出,直到最大时间时间后强制退出(kill -9
)。
普通情况下,大多业务的启动命令如下
command: ["binary", "-flags", ...]
主进程做为 1 号进程会收到sigterm
信号,优雅退出(需要程序捕获信号); 而通过脚本启动时,shell
作为 1 号进程,不会显示传递信号给子进程,造成子进程无法优雅退出,直到最大退出时间后强制终止。
如何只需一个进程收到信号,可通过exec
,exec
会替换当前 shell 进程,即pid
不变
#! /bin/bash
# do something
exec binay -flags ...
正常情况测试命令如下,使用 sleep 来模拟应用sh -c 'echo "start"; sleep 100'
: pstree
展示如下,sleep
进程会生成一个子进程
bash(28701)───sh(24588)───sleep(24589)
通过exec
运行后,命令sh -c 'echo "start"; exec sleep 100'
bash(28701)───sleep(24664)
加入exec
后,sleep
进程替换了 shell 进程,没有生成子进程
此种方式可以收到信号,但只适用于一个子进程的情况
在 shell 中可以显示通过trap
捕捉信号传递给子进程
#!/bin/bash
echo "start"
binary -flags... &
pid="$!"
_kill() {
echo "receive sigterm"
kill $pid #传递给子进程
wait $pid
exit 0
}
trap _kill SIGTERM #捕获信号
wait #等待子进程退出
此种方式需要改动启动脚本,显示传递信号给子进程
docker-init
docker-init即在 docker 启动时加入--init
参数,docker-int 会作为一号进程,会向子进程传递信号并且会回收僵尸进程。
遗憾的是 k8s 并不支持--init
参数,用户可在镜像中声明 init 进程,更多可参考container-init
RUN wget -O /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64
RUN chmod +x /usr/bin/dumb-init
ENTRYPOINT ["/usr/bin/dumb-init", "-v", "--"]
CMD ["nginx", "-g", "daemon off;"]
Recommend
-
4
如何优雅地管理你的 shell 脚本? 发表于 2021-04-05...
-
10
首页 > 文章详情 LPR连续十二个月“按兵不动”,传递哪些信号? 12小时前 5,860 本文来自:金融时报,作者:马玲 LPR报价...
-
8
房地产税座谈会,传递什么信号?中国经济...
-
7
在本教程中介绍创建bash脚本并使用chmod命令使脚本可执行,无需脚本前面加上sh或bash命令就可以运行它。创建脚本文件第一步是使用以下命令创建一个扩展名为.sh的新文件:[root@localhost ~]# touch hello_script.sh写一个简单的脚本
-
2
中央经济工作会议12月8日至10日在北京举行,总结2021年经济工作,分析当前经济形势,部署2022年经济工作。中央经济工作会议传递清晰信号:新一轮稳增长来了,货币转向宽松,财政政策转向积极,支持新基建、新能源、科技创新,...
-
8
综研视点|中央传递明确信号,深圳双统筹怎么做 当下深圳有三场硬仗:阻击本土疫情、统筹好疫情防控和经济社会发展,支援香港抗疫。 3月17日,中共中央...
-
5
LPR连续两个月维持不变,传递什么信号丨火线解读 第一财经 5小时后 作者:张瑜 责编:顾蓓蓓 虽然本月LPR保持不变,银行也会按照相关政策要求,继续通过多种途径加大对实体经济的支持力度,实现实际融资成...
-
6
国际航班渐多 传递了什么信号? 21世纪经济报道记者 高江虹 北京报道 “终于能回国了!”定居澳大利...
-
3
使用python脚本传递参数:(三种方式可收藏) 背景...
-
7
大并购落地,沃尔玛财报传递出什么信号? ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK