在 Kubernetes 中,倘若 Pod 里的程序接收关闭信号失效,这或许是由于程序经由 shell 脚本启动,而 shell 进程默认不会把接收到的 SIGTERM 信号传递给子进程。
针对此问题,主要的解决办法有如下两种:
其一,在脚本里,实际启动程序时添加 exec 命令:
#!/bin/bashecho startexec ./my_program
经此修改,my_program 程序将替换 shell,并且不会产生子进程。当 Kubernetes 发送 SIGTERM 信号时,接收信号的直接就是 my_program 服务,如此一来,优雅关闭便能正常触发。
其二,运用 Linux 中的 trap 命令传递信号:
#!/bin/sh ./my_program & pid="$!" _kill { echo "start closing..." kill $pid wait $pid exit 0 } trap _kill SIGTERM wait
当 Kubernetes 中的 Pod 被删除或者重新部署时,会向容器内的 shell 发送 SIGTERM 信号。鉴于在脚本中使用了 trap 命令将信号传递给 my_program 程序,进而能够触发其优雅关闭。
转载此文是出于传递更多信息目的。若来源标注错误或侵犯了您的合法权益,请与本站联系,我们将及时更正、删除、谢谢。
https://www.414w.com/read/910905.html