J'ai un serveur Web Debian que j'utilise pour le grattage d'écran occasionnel via Selenum et Python.
J'utilise Xvfb comme serveur X virtuel sur lequel Firefox s'exécute lorsqu'il est contrôlé par Selenium. Étant donné que je (pense) que je dois commencer à utiliser cela sudo
, je ne pense pas qu'il soit possible de le démarrer à partir de Python à chaque fois (voir ma question Stack Overflow ), alors j'ai pensé que je pouvais simplement le faire fonctionner tout le temps .
Je le démarre actuellement comme ceci sur la ligne de commande:
sudo Xvfb :99 -nolisten tcp -fbdir /var/run
Quelle méthode dois-je utiliser pour le faire automatiquement au démarrage? Dois-je utiliser cron
, comme suggéré ici ?
/etc/rc.local
préférable à l'utilisationupdate-rc.d
avec ses propres scripts individuels?update-rc.d
c'est préférable et qu'il est certainement plus performant, maisrc.local
c'est plus rapide et plus facile. De plus, je pense que Gilles a raison, il n'y a aucune raison pour que cela fonctionne comme root.Votre prémisse n'est pas valide: il n'y a aucune raison d'exécuter Xvfb en tant que root. Votre serveur X habituel ne doit s'exécuter qu'en tant que root (sur de nombreux mais pas sur tous les appareils) uniquement pour pouvoir accéder au matériel vidéo; ce n'est pas un problème pour Xvfb par définition.
Si vous souhaitez exécuter Xvfb au démarrage, vous pouvez utiliser cron en
@reboot
remplaçant les cinq champs de date et d'heure. Vous pouvez le faire dans la crontab de n'importe quel utilisateur, pas seulement dans la racine. Mais je ne vois pas l'intérêt. Vos scripts seraient plus robustes si vous démarriez Xvfb quand vous en avez besoin, exactement comme vous semblez l'avoir initialement prévu.la source
xvfb-run
commande qui est généralement livrée avec Xvfb. Voici la référence cli pourxvfb-run
manpages.debian.org/stretch/xvfb/xvfb-run.1.fr.html . @Paul, vous pouvez l'exécuter comme suit:xvfb-run --server-args="-nolisten tcp -fbdir /var/run" python some-selenium.py
Comme l'a suggéré @Gilles , il est plus approprié de fonctionner à la demande, en particulier lorsque vous l'utilisez pour les tests de sélénium. Voici des exemples de commandes shell:
La vérification de l'affichage en utilisant
xdpyinfo
avant vous assurera de ne pas exécuter le framebuffer virtuel deux fois.Si vous avez vraiment besoin de le démarrer au démarrage, vous pouvez essayer le script init.d suivant :
Source: dloman / xvfb sur GitHub ( dérivé de: jterrace / xvfb )
Enregistrez-le sous
/etc/init.d/xvfb
et rendez-le exécutable, puis démarrez-le comme:Pour s'exécuter automatiquement au démarrage, exécutez:
Pour le supprimer de l'exécution automatique, exécutez:
Ajoutez également au
environment
fichier pour être reconnu par les programmes X, par exemple:Voici la version pour la version systemd: dloman / xvfb.service .
la source