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.

Другие вопросы по тегам