Tengo un servidor web Debian que estoy usando para el raspado ocasional de pantalla a través de Selenum y Python.
Uso Xvfb como un servidor X virtual para que Firefox se ejecute cuando se controla mediante Selenium. Dado que (creo) que tengo que comenzar a usar esto sudo
, no creo que sea factible iniciarlo desde Python cada vez (vea mi pregunta de Desbordamiento de pila ), así que pensé que podría hacerlo funcionar todo el tiempo .
Actualmente lo inicio así en la línea de comando:
sudo Xvfb :99 -nolisten tcp -fbdir /var/run
¿Qué método debo usar para hacer esto automáticamente al inicio? ¿Debo usar cron
, como se sugiere aquí ?
/etc/rc.local
prefiere la edición al usoupdate-rc.d
con los propios guiones individuales?update-rc.d
es preferido y ciertamente es más capaz, perorc.local
es más rápido y fácil. Además, creo que Gilles tiene razón, no hay razón para que esto deba ejecutarse como root.Su premisa no es válida: no hay ninguna razón para ejecutar Xvfb como root. Su servidor X habitual solo necesita ejecutarse como root (en muchos, pero no en todos), para que pueda acceder al hardware de video; eso no es un problema para Xvfb por definición.
Si desea ejecutar Xvfb al inicio, puede usar cron
@reboot
reemplazando los cinco campos de fecha y hora. Puede hacerlo en el crontab de cualquier usuario, no solo en la raíz. Pero no veo el punto. Sus scripts serían más sólidos si iniciara Xvfb cuando lo necesita, tal como parece haberlo planeado originalmente.fuente
xvfb-run
comando que generalmente se envía con Xvfb. Aquí está la referencia de cli paraxvfb-run
manpages.debian.org/stretch/xvfb/xvfb-run.1.en.html . @Paul podrías ejecutarlo de la siguiente manera:xvfb-run --server-args="-nolisten tcp -fbdir /var/run" python some-selenium.py
Como sugirió @Gilles , es más adecuado para ejecutar bajo demanda, especialmente cuando lo está utilizando para las pruebas de selenio. Aquí hay ejemplos de comandos de shell:
Si comprueba la pantalla usando
xdpyinfo
antes, se asegurará de que no ejecutará framebuffer virtual dos veces.Si realmente necesita iniciarlo al inicio, puede probar el siguiente script init.d :
Fuente: dloman / xvfb en GitHub (bifurcado de: jterrace / xvfb )
Guárdelo
/etc/init.d/xvfb
y hágalo ejecutable, luego inícielo como:Para ejecutarse automáticamente al inicio, ejecute:
Para eliminarlo de la ejecución automática, ejecute:
También agregue al
environment
archivo para ser reconocido por los programas X, por ejemplo:Aquí está la versión para la versión systemd: dloman / xvfb.service .
fuente