带kubectl命令的Bash脚本加&后台运行失败问题排查
问题解决:后台运行含kubectl exec -it的脚本失败
问题现象
- 脚本仅包含
#!/bin/bash和一行kubectl命令:kubectl -it exec -c mysql mysql-0 -- bash -c "ls -lah /tmp" - 前台直接运行脚本(
./z_mysql-init-pv_TEST.sh)正常,可列出容器内/tmp目录文件 - 后台运行(
./z_mysql-init-pv_TEST.sh &)时执行失败,脚本权限为-rwxrwxr-x
原因分析
kubectl exec的-it是两个参数的组合:
-i:保持标准输入打开(即使未附加终端)-t:分配伪终端(PTY)
后台运行的进程没有可用终端来分配PTY,-t参数会触发执行失败。而你的命令只是执行非交互式的ls操作,完全不需要分配伪终端。
解决方案
移除命令中的-t参数,根据需求选择以下两种修改方式:
- 保留
-i(适用于需要保持标准输入打开的场景):
kubectl -i exec -c mysql mysql-0 -- bash -c "ls -lah /tmp"
- 直接去掉
-it(因为ls是纯输出命令,无需交互或标准输入):
kubectl exec -c mysql mysql-0 -- bash -c "ls -lah /tmp"
修改脚本后,无论前台还是后台运行,都能正常输出容器内/tmp目录的文件列表。
内容的提问来源于stack exchange,提问作者user3008410
相关产品推荐
相关产品推荐

