特定のスクリプトまたはコマンドを実行すると中断されるユーザーがいますjenkins
(Androidビルドサーバーです)。と同じスクリプト/コマンドを実行するとroot
正常に実行されます。
例:
ユーザーとしてjenkins
:
> java
--hang--
ユーザーとしてroot
:
> java
- ヘルプ出力を使用してください -
jenkins
これは(例:and)で実行される多くのコマンドで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
jenkinsで実行するものとrootユーザーとして実行することの違いは、次の行でstrace -fo java
違いを示しています。
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
。
答え1
重要な要約:一部のユーザーは環境変数を有効にしていましたが、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