Debian'a başlarken Xvfb'yi nasıl başlatırım?


9

Selenum ve Python üzerinden ekran kazıma için kullandığım bir Debian web sunucum var.

Xvfb'yi, Selenium tarafından kontrol edildiğinde Firefox'un çalışması için sanal bir X sunucusu olarak kullanıyorum. Bunu kullanmaya başlamak zorunda olduğum göz önüne alındığında, sudoher seferinde Python'dan başlatmanın mümkün olacağını düşünmüyorum ( Stack Overflow sorusuna bakın ), bu yüzden her zaman çalıştırabileceğini düşündüm .

Şu anda komut satırında şöyle başlıyorum:

sudo Xvfb :99 -nolisten tcp -fbdir /var/run

Başlangıçta bunu otomatik olarak yapmak için hangi yöntemi kullanmalıyım? Buradacron önerildiği gibi kullanmalıyım ?

Yanıtlar:


6

Debian'da, Xvfb komutunu ekleyebilirsiniz /etc/rc.local. Xvfb kendini arka plana ayırmazsa, komutun sonundaki a işaretini &kullanın.

Başlangıç ​​komut dosyalarının tam olarak ne zaman çalıştırılacağı konusunda size daha fazla kontrol sağlaması ve hizmetleri başlatmanın geleneksel yolu olmasına rağmen, cron kullanımı da işe yarayacaktır.


Aha, mükemmel. Düzenleme kişinin kendi ayrı komut dosyalarıyla /etc/rc.localkullanılmasını mı tercih ediyor update-rc.d?
Paul D.Waite

2
@ Paul söyleyebilirim update-rc.dtercih edilir ve kesinlikle daha yeteneklidir, ancak rc.localdaha hızlı ve daha kolaydır. Ayrıca, Gilles'in haklı olduğunu, bunun kök olarak çalışması için bir neden yok.
Andy

4

Öncülünüz geçersiz: Xvfb'yi root olarak çalıştırmak için bir neden yok. Her zamanki X sunucunuzun sadece video donanımına erişebilmesi için yalnızca root olarak (tüm ünitelerde değil tümünde değil) çalışması gerekir; tanım gereği Xvfb için bu bir sorun değil.

Xvfb'yi başlangıçta çalıştırmak istiyorsanız, cron'u @rebootbeş tarih ve saat alanını değiştirerek kullanabilirsiniz . Bunu sadece root'larda değil, herhangi bir kullanıcının crontab'ında yapabilirsiniz. Ama konuyu anlamıyorum. Xvfb'yi ihtiyacınız olduğunda başlattığınızda, başlangıçta planladığınız şekilde komut dosyalarınız daha sağlam olurdu.


Geçerli nokta. Xvfb'yi tek bir komut için çalıştırmak için, xvfb-rungenellikle Xvfb ile birlikte gelen komutu kullanabilirsiniz . İşte xvfb-run manpages.debian.org/stretch/xvfb/xvfb-run.1.en.html için cli referansı . @ Paul aşağıdaki gibi çalıştırabilirsiniz:xvfb-run --server-args="-nolisten tcp -fbdir /var/run" python some-selenium.py
sebisnow

4

@Gilles'in önerdiği gibi , özellikle Selenyum testi için kullandığınızda, talep üzerine çalıştırmak daha uygundur. Örnek kabuk komutları:

export DISPLAY=:99
xdpyinfo -display $DISPLAY > /dev/null || Xvfb $DISPLAY -screen 0 1024x768x16 &

Ekranı daha xdpyinfoönce kullanarak kontrol etmek , sanal çerçeve arabelleğini iki kez çalıştırmayacağınızdan emin olmanızı sağlar.


Başlangıçta gerçekten başlatmanız gerekiyorsa, aşağıdaki init.d komut dosyasını deneyebilirsiniz :

#!/bin/sh
XVFB=/usr/bin/Xvfb
XVFBARGS=":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset -nolisten tcp"
PIDFILE=/var/run/xvfb.pid
case "$1" in
  start)
    echo -n "Starting virtual X frame buffer: Xvfb"
    start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
    echo "."
    ;;
  stop)
    echo -n "Stopping virtual X frame buffer: Xvfb"
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    echo "."
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
        echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
        exit 1
esac

exit 0

Kaynak: GitHub'da dloman / xvfb (çatallı: jterrace / xvfb )

Farklı kaydedin /etc/init.d/xvfbve yürütülebilir yapın, ardından şu şekilde başlatın:

/etc/init.d/xvfb start

Başlangıçta otomatik olarak çalıştırmak için şunu çalıştırın:

sudo update-rc.d xvfb defaults

Otomatik çalıştırmadan kaldırmak için şunu çalıştırın:

sudo update-rc.d -f xvfb remove

Ayrıca environmentX programları tarafından tanınacak dosyaya ekleyin , örneğin:

echo DISPLAY=":1" | sudo tee -a /etc/environment

İşte systemd sürümü için sürüm: dloman / xvfb.service .


Bu bir yaşında olduğunu biliyorum ama bununla çalışmak için bir javascript selenyum sürümü alamıyorum görünmüyor. Eğer önyükleme sonra çalıştırırsanız çalışır ama bir hizmet olarak başlattığınızda xvfb algılamıyor gibi. Her ikisinin de başlangıçta hizmet olarak nasıl çalışabileceğine dair bir fikrim var mı?
Masinde Muliro

@MasindeMuliro O zaman başka bir soru sorabilirsiniz, böylece cevaplar probleminize özgü olacak şekilde daha güncel hale getirilebilir.
kenorb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.