概述
在启动 Spark Operator 的时候出现了一个意想不到的问题。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# kubectl log -n kube-system spark-sparkoperator-86f6c889cd-ggbmc
log is DEPRECATED and will be removed in a future version. Use logs instead.
++ id -u
+ myuid=185
++ id -g
+ mygid=0
+ set +e
++ getent passwd 185
+ uidentry=
+ set -e
+ echo 185
185
0
+ echo 0
+ echo
+ [[ -z '' ]]
+ [[ -w /etc/passwd ]]
+ echo '185❌185:0:anonymous uid:/opt/spark:/bin/false'
+ exec /usr/bin/tini -s -- /usr/bin/spark-operator
[FATAL tini (9)] tcsetpgrp failed: Permission denied
|
因为笔者在腾讯,这是因为开发环境的 tlinux 的问题,导致 tini
出错了。寻找了很久,也没找到 特别有效的信息,于是查看一下 tini
的源码,看看这个错误是如何产生的。
tini源码
大家可以看到这行代码,错误信息就是由他打印的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// Doing it in the child process avoids a race condition scenario
// if Tini is calling Tini (in which case the grandparent may make the
// parent the foreground process group, and the actual child ends up...
// in the background!)
if (tcsetpgrp(STDIN_FILENO, getpgrp())) {
if (errno == ENOTTY) {
PRINT_DEBUG("tcsetpgrp failed: no tty (ok to proceed)");
} else if (errno == ENXIO) {
// can occur on lx-branded zones
PRINT_DEBUG("tcsetpgrp failed: no such device (ok to proceed)");
} else {
PRINT_FATAL("tcsetpgrp failed: %s", strerror(errno));
return 1;
}
}
|
可以直接把这段代码注释掉,然后重新编译 cmake . && make
。
总结
将重新编译后的 tini
替换原来镜像的 tini
即可,当然了,如果是其他家的 Linux 系统就不会有这样的问题。
警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。