제공된 xvfb-run 스크립트를 사용하여 헤드리스 테스트를 실행하려고 하는 까다로운 문제를 해결하고 있습니다.wxya. VirtualBox에서 실행되는 자체 Ubuntu 이미지에서는 작동하지만 Atlassian에서 Elastic Bamboo용으로 제공하는 Ubuntu 15.04 AMI에서는 작동하지 않습니다. 문제를 여기까지 추적했습니다.
xvfb 실행:
...
# Start Xvfb.
MCOOKIE=$(mcookie)
tries=10
while [ $tries -gt 0 ]; do
tries=$(( $tries - 1 ))
XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1
add :$SERVERNUM $XAUTHPROTO $MCOOKIE
EOF
# handle SIGUSR1 so Xvfb knows to send a signal when it's ready to accept
# connections
trap : USR1
(trap '' USR1; exec Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP -auth $AUTHFILE >>"$ERRORFILE" 2>&1) &
XVFBPID=$!
wait || :
if kill -0 $XVFBPID 2>/dev/null; then
break
elif [ -n "$AUTONUM" ]; then
# The display is in use so try another one (if '-a' was specified).
SERVERNUM=$((SERVERNUM + 1))
SERVERNUM=$(find_free_servernum)
continue
fi
error "Xvfb failed to start" >&2
XVFBPID=
exit 1
done
...
스크립트는 "대기" 상태로 들어가지만 Xvfb에서 예상되는 SIGUSR1을 가져오지 않습니다. (SIGUSR1을 수동으로 보내면 스크립트가 제대로 작동합니다.) 모든 패키지를 최신 버전으로 업데이트했지만 여전히 마음에 들지 않습니다. 다른 Ubuntu 시스템에서도 작동할 수 있기 때문에 이상합니다. xvfb 오류 로그($ERRORFILE)가 생성되었지만 내용이 없습니다.
근본 원인에 대한 생각, 아니면 최소한 더 깊은 연구?
답변1
아, 신경 쓰지 마세요. 마침내 문제를 알아냈습니다. Atlassian은 신호 전송을 방지하는 자체 Xvfb 래퍼 스크립트(/usr/local/bin/Xvfb)를 추가했습니다. 나중에 이 문제가 발생하는 경우 Xvfb가 직접 실행되거나 래퍼를 통해 실행되는지 확인하십시오. 그렇게 하면 xvfb-run이 중단됩니다.
답변2
Atlassian 래퍼 스크립트 없이 다른 이미지를 사용해도 동일한 증상이 발생하는 경우:
xvfb-run을 컨테이너의 기본(init) 프로세스로 사용하면 분명히 내부 신호 처리가 중단되고 wait
중단이 발생합니다. init 프로세스를 사용하여 이 문제를 해결하십시오.매우 작은, 컨테이너에 추가하거나 docker run --init
.