
私はDebian Webサーバーを持っており、時々SelenumとPythonを介して画面スクレイピングを行います。
私はSelenium制御下で実行されるFirefox用の仮想XサーバーとしてXvfbを使用しています。私が(考えるのに)始めなければならないことを考えるsudo
と私のスタックオーバーフローの質問)だから、何度も実行できると思いました。
現在、次のようにコマンドラインから始めます。
sudo Xvfb :99 -nolisten tcp -fbdir /var/run
起動時に自動的にこれを行うにはどのような方法を使用する必要がありますか?cron
提案どおりに使用する必要があります。ここ?
答え1
/etc/rc.local
Debian では、Xvfb がバックグラウンドで分離されていない場合は、コマンドの最後に Xvfb コマンドを追加できます&
。
cronを使用しても機能します。ただし、initスクリプトを使用すると、実行される開始順序の正確な時間をより効果的に制御できます。これはサービスを開始する従来の方法です。
答え2
〜のように@ギルス特にSeleniumテストに使用する場合は、オンデマンド実行に適しています。以下はシェルコマンドの例です。
export DISPLAY=:99
xdpyinfo -display $DISPLAY > /dev/null || Xvfb $DISPLAY -screen 0 1024x768x16 &
使用前にディスプレイを確認すると、xdpyinfo
仮想フレームバッファを2回実行しないことを確認できます。
本当に始める必要がある場合は、次の方法を試してみてください。初期化ファイルスクリプト:
#!/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
源泉:GitHubのdloman/xvfb(次から分岐:jterrace/xvfb)
別の名前で保存し/etc/init.d/xvfb
て実行可能にしたら、次のように実行します。
/etc/init.d/xvfb start
起動時に自動的に実行するには:
sudo update-rc.d xvfb defaults
自動実行から削除するには、次を実行します。
sudo update-rc.d -f xvfb remove
environment
また、Xプログラムで認識可能なファイルに追加してください。たとえば、次のようになります。
echo DISPLAY=":1" | sudo tee -a /etc/environment
これはシステムバージョンです:dloman/xvfb.service。
答え3
前提が無効です。 Xvfbをrootとして実行する理由はありません。一般的なXサーバーは、定義に従ってビデオハードウェアにアクセスできるように、ルート(多くのUnixで)で実行する必要があります。これはXvfbにとって問題ではありません。
起動時にXvfbを実行するには、cronを使用して@reboot
5つの日付と時刻のフィールドを置き換えることができます。ルートのcrontabだけでなく、すべてのユーザーのcrontabでこれを行うことができます。しかし、私はこれを理解していません。もともと計画したように必要なときにXvfbを起動すると、スクリプトがより強力になります。