Come eseguire il polling di Xvfb per essere pronto?


11

La documentazione di Travis CI dice di essere eseguita sleep 3dopo aver iniziato xvfba "concedere [un po 'di tempo per iniziare". Non sono riuscito a trovare riferimenti a questo ritardo nella manpagina . Questa programmazione di culto del carico? In caso contrario, come faccio a sondare anziché dormire per garantire che sia disponibile?

Risposte:


6

Per impostazione predefinita, Xvfbverrà creato un socket Dominio Unix per la connessione dei client. Sul mio sistema viene creato questo file socket /tmp/.X11-unix/. È possibile utilizzare inotifywaitper ascoltare gli eventi in questa directory. Per esempio,

 $ inotifywait -e create /tmp/.X11-unix/

e quindi eseguire Xvfb :9(display 9, ad esempio). Quando è pronto dovresti vedere

/tmp/.X11-unix/ CREATE X9

dal inotifywaitquale terminerà. Ora dovresti essere in grado di connetterti DISPLAY=:9.


Questo farebbe il lavoro su un sistema in cui posso aspettarmi un controllo adeguato del lavoro, ma sto provando a farlo in un file di configurazione di Travis CI. Non credo di poter fare affidamento sul fatto di poter utilizzare i lavori in background e attendere che finiscano.
l0b0,

3
Un semplice ha while [ ! -e /tmp/.X11-unix/X99 ]; do sleep 0.1; doneeffettivamente fatto il trucco . Contrassegno come risolto a causa della punta del percorso.
20

1

Per coloro che possono eseguire script completi, un'altra opzione sarebbe quella di utilizzare xdpyinfosul display desiderato:

# Start Xvfb
sudo /usr/bin/Xvfb ${DISPLAY} -screen 0 1280x800x24 &

# Wait for Xvfb
MAX_ATTEMPTS=120 # About 60 seconds
COUNT=0
echo -n "Waiting for Xvfb to be ready..."
while ! xdpyinfo -display ${DISPLAY} >/dev/null 2>&1; do
  echo -n "."
  sleep 0.50s
  COUNT=$(( COUNT + 1 ))
  if [ "${COUNT}" -ge "${MAX_ATTEMPTS}" ]; then
    echo "  Gave up waiting for X server on ${DISPLAY}"
    exit 1
  fi
done
echo "  Done - Xvfb is ready!"

(Risposta ispirata da https://gist.github.com/tullmann/476cc71169295d5c3fe6 ).


Grazie! Basta una sola xdpyinforiga; il ciclo potrebbe essere fatto in un milione di modi diversi.
l0b0

Sicuro che può essere fatto in molti modi. Tuttavia, questo frammento crea un output piuttosto stampato che ti dà anche un'idea di quanto tempo ha impiegato Xvfb per essere pronto. L'ho scritto per mio uso, ma ho capito che anche altri possono trarne beneficio.
Anton
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.