나는 Debian 웹 서버를 가지고 있으며 가끔 Selenum과 Python을 통해 화면 스크래핑을 수행합니다.
저는 Selenium 제어 하에 실행되는 Firefox용 가상 X 서버로 Xvfb를 사용하고 있습니다. 내가 (생각하는데) 시작해야 한다는 점을 고려 sudo
하면내 스택 오버플로 질문) 그래서 계속해서 실행할 수 있다고 생각했습니다.
현재 다음과 같이 명령줄에서 시작합니다.
sudo Xvfb :99 -nolisten tcp -fbdir /var/run
시작할 때 자동으로 이 작업을 수행하려면 어떤 방법을 사용해야 합니까? cron
제안대로 사용해야 겠어요여기?
답변1
/etc/rc.local
데비안에서는 Xvfb가 백그라운드로 분리되지 않으면 명령 끝에 Xvfb 명령을 추가할 수 있습니다 &
.
cron을 사용해도 작동합니다. 단, init 스크립트를 사용하면 실행될 시작 순서의 정확한 시간을 더 효과적으로 제어할 수 있으며 이는 서비스를 시작하는 전통적인 방법입니다.
답변2
~처럼@길스특히 Selenium 테스트에 사용하는 경우 주문형 실행에 더 적합합니다. 다음은 쉘 명령의 예입니다.
export DISPLAY=:99
xdpyinfo -display $DISPLAY > /dev/null || Xvfb $DISPLAY -screen 0 1024x768x16 &
사용하기 전에 디스플레이를 확인하면 xdpyinfo
가상 프레임 버퍼를 두 번 실행하지 않는지 확인할 수 있습니다.
정말로 시작해야 하는 경우 다음 방법을 시도해 볼 수 있습니다.초기화 파일스크립트:
#!/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를 루트로 실행할 이유가 없습니다. 일반적인 X 서버는 정의에 따라 비디오 하드웨어에 액세스할 수 있도록 루트(많은 유니스에서)로 실행되어야 합니다. 이는 Xvfb에 문제가 되지 않습니다.
시작 시 Xvfb를 실행하려면 cron을 사용하여 @reboot
5개의 날짜 및 시간 필드를 바꿀 수 있습니다. 루트의 crontab뿐만 아니라 모든 사용자의 crontab에서 이 작업을 수행할 수 있습니다. 그러나 나는 이것을 이해하지 못합니다. 원래 계획했던 대로 필요할 때 Xvfb를 시작하면 스크립트가 더욱 강력해집니다.