Ich habe einen Debian-Webserver, den ich für gelegentliches Screen-Scraping über Selenum und Python verwende.
Ich verwende Xvfb als virtuellen X-Server, auf dem Firefox ausgeführt werden kann, wenn es von Selenium gesteuert wird. Angesichts der Tatsache, dass ich (denke), dass ich damit beginnen sudo
muss, denke ich nicht, dass es möglich ist, es jedes Mal von Python aus zu starten (siehe meine Frage zum Stapelüberlauf ), also dachte ich mir, ich könnte es einfach die ganze Zeit laufen lassen .
Ich starte es derzeit so in der Kommandozeile:
sudo Xvfb :99 -nolisten tcp -fbdir /var/run
Welche Methode sollte ich verwenden, um dies beim Start automatisch zu tun? Soll ich verwenden cron
, wie hier vorgeschlagen ?
/etc/rc.local
der Verwendungupdate-rc.d
mit eigenen Skripten vorzuziehen ?update-rc.d
ist bevorzugt und sicherlich leistungsfähiger, aberrc.local
schneller und einfacher. Ich denke auch, dass Gilles Recht hat. Es gibt keinen Grund, warum dies als Root ausgeführt werden muss.Ihre Prämisse ist ungültig: Es gibt keinen Grund, Xvfb als Root auszuführen. Ihr üblicher X-Server muss nur als Root (auf vielen, aber nicht allen Unices) ausgeführt werden, damit er auf die Videohardware zugreifen kann. Das ist per Definition kein Problem für Xvfb.
Wenn Sie Xvfb beim Start ausführen möchten, können Sie cron verwenden
@reboot
, um die fünf Datums- und Uhrzeitfelder zu ersetzen. Sie können dies in der Crontab eines jeden Benutzers tun, nicht nur in der Root. Aber ich verstehe den Punkt nicht. Ihre Skripte wären robuster, wenn Sie Xvfb bei Bedarf starten würden, genau so, wie Sie es ursprünglich geplant zu haben scheinen.quelle
xvfb-run
Befehl verwenden, der normalerweise mit Xvfb geliefert wird. Hier ist die CLI-Referenz fürxvfb-run
manpages.debian.org/stretch/xvfb/xvfb-run.1.en.html . @ Paul Sie könnten es wie folgtxvfb-run --server-args="-nolisten tcp -fbdir /var/run" python some-selenium.py
Wie von @Gilles vorgeschlagen, ist es besser geeignet, bei Bedarf ausgeführt zu werden, insbesondere wenn Sie es für Selentests verwenden. Hier sind Beispiel-Shell-Befehle:
Wenn Sie die Anzeige mit "Vorheriges" überprüfen,
xdpyinfo
wird sichergestellt, dass Sie den virtuellen Framebuffer nicht zweimal ausführen.Wenn Sie es beim Start wirklich starten müssen, können Sie das folgende init.d- Skript ausprobieren :
Quelle: dloman / xvfb bei GitHub (gegabelt von: jterrace / xvfb )
Speichern Sie es als
/etc/init.d/xvfb
und machen Sie es ausführbar, dann starten Sie es als:Führen Sie Folgendes aus, um beim Start automatisch ausgeführt zu werden:
Führen Sie Folgendes aus, um es aus dem Autorun zu entfernen:
Fügen Sie auch eine
environment
Datei hinzu, die von X-Programmen erkannt werden soll, z.Hier ist die Version für die systemd-Version: dloman / xvfb.service .
quelle