Eu tenho um servidor web Debian que estou usando para raspagem de tela ocasional via Selenum e Python.
Eu uso o Xvfb como um servidor X virtual para o Firefox rodar ao ser controlado pelo Selenium. Dado que eu (acho) tenho que começar esse uso sudo
, não acho que seja possível iniciá-lo a partir do Python todas as vezes (veja minha pergunta do Stack Overflow ), então achei que poderia fazê-lo funcionar o tempo todo .
Atualmente, inicio-o assim na linha de comando:
sudo Xvfb :99 -nolisten tcp -fbdir /var/run
Que método devo usar para fazer isso automaticamente na inicialização? Devo usar cron
, como sugerido aqui ?
/etc/rc.local
preferível a usarupdate-rc.d
com os próprios scripts individuais?update-rc.d
é o preferido e certamente é mais capaz, masrc.local
é mais rápido e fácil. Além disso, acho que Gilles está certo, não há razão para isso precisar ser executado como root.Sua premissa é inválida: não há razão para executar o Xvfb como root. Seu servidor X habitual só precisa ser executado como root (em muitos, mas não em todos os), apenas para que ele possa acessar o hardware de vídeo; isso não é um problema para o Xvfb por definição.
Se você deseja executar o Xvfb na inicialização, pode usar o cron
@reboot
substituindo os cinco campos de data e hora. Você pode fazer isso no crontab de qualquer usuário, não apenas no root. Mas não vejo o ponto. Seus scripts seriam mais robustos se você iniciasse o Xvfb quando necessário, da maneira que parece ter planejado originalmente.fonte
xvfb-run
comando que geralmente acompanha o Xvfb. Aqui está a referência cli paraxvfb-run
manpages.debian.org/stretch/xvfb/xvfb-run.1.en.html . @ Paul você pode executá-lo da seguinte forma:xvfb-run --server-args="-nolisten tcp -fbdir /var/run" python some-selenium.py
Como o @Gilles sugeriu, é mais adequado executar sob demanda, especialmente quando você o usa para testes de selênio. Aqui está um exemplo de comandos do shell:
Verificar a exibição usando
xdpyinfo
antes garantirá que você não execute o buffer de quadros virtual duas vezes.Se você realmente precisar iniciá-lo na inicialização, tente o seguinte script init.d :
Fonte: dloman / xvfb no GitHub (bifurcado em: jterrace / xvfb )
Salve-o como
/etc/init.d/xvfb
e torne-o executável; em seguida, inicie-o como:Para executar automaticamente na inicialização, execute:
Para removê-lo da execução automática, execute:
Adicione também o
environment
arquivo a ser reconhecido pelos programas X, por exemplo:Aqui está a versão da versão do systemd: dloman / xvfb.service .
fonte