我有一个用户jenkins
在运行某些脚本或命令时挂起(这是一个android构建服务器)。当运行与相同的脚本/命令时root
,它们将执行OK。
例子:
作为用户jenkins
:
> java
-挂起-
作为用户root
:
> java
-使用帮助输出-
对于许多以jenkins
,android
和等方式运行的命令,都会发生这种情况java
,但像ps
和这样的命令cat
就可以正常工作。
这是最近的发展,因此可能是某种权限问题,但我无法确定。
更新:set -x
在脚本的开头添加以下内容即可显示在调用java
时该行挂起了: + exec /etc/alternatives/java_sdk_1.8.0/bin/java -Dorg.gradle.appname=gradlew -classpath /var/lib/jenkins/workspace/android-project/gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain assembleDebug
strace -fo java
在jenkins和root用户上运行之间的差异在以下几行显示出差异:
5319 stat("/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-2.b16.e | 5302 stat("/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-2.b16.e
5319 open("/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-2.b16.e | 5302 open("/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-2.b16.e
5319 stat("/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-2.b16.e | 5302 stat("/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-2.b16.e
5319 open("/opt/glibc-2.14/lib/tls/x86_64/libpthread.so.0", | 5302 open("/etc/ld.so.cache", O_RDONLY) = 3
5319 stat("/opt/glibc-2.14/lib/tls/x86_64", 0x7ffe601248c0) | 5302 fstat(3, {st_mode=S_IFREG|0644, st_size=49448, ...}) =
5319 open("/opt/glibc-2.14/lib/tls/libpthread.so.0", O_RDONL | 5302 mmap(NULL, 49448, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fa
5319 stat("/opt/glibc-2.14/lib/tls", 0x7ffe601248c0) = -1 EN | 5302 close(3) = 0
5319 open("/opt/glibc-2.14/lib/x86_64/libpthread.so.0", O_RD | 5302 open("/lib64/libpthread.so.0", O_RDONLY) = 3
5319 stat("/opt/glibc-2.14/lib/x86_64", 0x7ffe601248c0) = -1 | 5302 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0
5319 open("/opt/glibc-2.14/lib/libpthread.so.0", O_RDONLY) = | 5302 fstat(3, {st_mode=S_IFREG|0755, st_size=146592, ...}) =
左边是jenkins
用户。在关于glibc-2.14的领域似乎似乎失败了,这是通过环境变量指向的LD_LIBRARY_PATH
。
TL; DR:一些用户将环境变量设置为use glibc-2.14
,这会导致Java VM执行失败。
查看strace diff,尤其是以下一行:
5319 open("/opt/glibc-2.14/lib/libpthread.so.0", O_RDONLY)
这表明某些用户正在使用glibc-2.14
二进制文件,而其他用户正在使用系统glibc
库(版本为2.12)。
不同之处在于,有些用户将LD_LIBRARY_PATH
环境变量设置为glibc-2.14
目录,而其他用户则没有,默认为系统的2.12
。清除LD_LIBRARY_PATH
该命令将为这些用户成功运行java命令。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句