xvfb-run зависает в режиме "ловушка / ожидание" в Ubuntu 15.04 AMI от Elastic Bamboo на AWS
Я пытаюсь выполнить несколько тестов безголовых роботов /Selenium через Elastic Bamboo с использованием Xvfb на Ubuntu 15.04 в AWS EC2. Это работает, если я запускаю Xvfb вручную, а затем запускаю тест...
export display=:99
Xvfb :99 -screen 0 1024x768x24 -nolisten tcp -ac &
pybot --nostatusrc --variablefile variables/vars.py -e TBD -e broken -x xunit -d reports/ tests/
<test output appears>
Но я хочу использовать предоставленный скрипт xvfb-run, чтобы я мог запускать несколько тестов параллельно и использовать их для разных дисплеев. Когда я запускаю его через xvfb-run, он зависает, ничего не выводится, никогда не завершается.
xvfb-run -a -e /dev/stdout --nostatusrc --variablefile variables/vars.py -e TBD -e broken -x xunit -d reports/ tests/
<hangs>
В скрипте /usr/bin/xvfb-run это ядро функциональности:
# 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
Ничто не отображается в stdout (или в журнале, если я установил его в файл). Поэтому я отредактировал xvfb-run для установки -x, и в результате скрипт попадает в exec, а затем зависает:
...
16-Nov-2015 14:36:52 + xauth source -
16-Nov-2015 14:36:52 + trap : USR1
16-Nov-2015 14:36:52 + XVFBPID=6123
16-Nov-2015 14:36:52 + wait
16-Nov-2015 14:36:52 + trap '' USR1
16-Nov-2015 14:36:52 + exec Xvfb :99 -screen 0 640x480x8 -nolisten tcp -auth /tmp/xvfb-run.js9dgH/Xauthority
<hangs here>
Из-за более подробного изучения он добирается до "ожидания" и ожидает, что дочерний процесс отправит обратно SIGUSR1, чтобы продолжить, но он либо никогда не получает отправку из Xvfb, либо не получает корректное получение оболочкой.
У кого-нибудь есть линия на том, что проблема могла быть?
Он работает на настольном компьютере Ubuntu 15.10 в VirtualBox, на сервере Ubuntu 15.10 в VirtualBox и на стандартном каноническом Ubuntu AMI (ami-3ad5af50) в EC2, поэтому он должен быть чем-то специфичным для настроенного в Atlassian Ubuntu AMI, но я не могу понять, что именно... Я вручную обновил экземпляр с их AMI до 15.10, но это не прояснилось.
1 ответ
Ах, не берите в голову, я наконец нашел проблему - Atlassian добавил собственный скрипт-обертку Xvfb (/ usr / local / bin / Xvfb), который блокировал отправку сигнала. Для тех, у кого эта проблема возникнет в будущем, проверьте и посмотрите, выполняется ли Xvfb напрямую или через обертку, и если это обертка, она сломает xvfb-run.