У меня есть веб-сервер Debian, который я использую для периодической очистки экрана через Selenum и Python.
Я использую Xvfb в качестве виртуального X-сервера для Firefox, чтобы работать под управлением Selenium. Учитывая, что я (думаю) я должен начать это использовать sudo
, я не думаю, что будет возможно запускать его из Python каждый раз (см. Мой вопрос переполнения стека ), поэтому я подумал, что могу просто запустить его все время ,
В настоящее время я запускаю это так в командной строке:
sudo Xvfb :99 -nolisten tcp -fbdir /var/run
Какой метод я должен использовать, чтобы сделать это автоматически при запуске? Должен ли я использовать cron
, как предложено здесь ?
/etc/rc.local
предпочтительным по сравнениюupdate-rc.d
с использованием собственных сценариев?update-rc.d
, предпочтительнее и, безусловно, более способный, ноrc.local
быстрее и проще. Кроме того, я думаю, что Жиль прав, нет причины, по которой это нужно для запуска с правами root.Ваше предположение неверно: нет причин запускать Xvfb от имени пользователя root. Ваш обычный X-сервер должен работать только как root (на многих, но не на всех устройствах) только для того, чтобы иметь доступ к видеооборудованию; это не проблема для Xvfb по определению.
Если вы хотите запустить Xvfb при запуске, вы можете использовать cron,
@reboot
заменив пять полей даты и времени. Вы можете сделать это в crontab любого пользователя, а не только в root. Но я не вижу смысла. Ваши сценарии были бы более надежными, если бы вы запускали Xvfb тогда, когда вам это нужно, именно так, как вы, кажется, изначально планировали это.источник
xvfb-run
команду, которая обычно поставляется с Xvfb. Ниже приведена ссылка наxvfb-run
manpages.debian.org/stretch/xvfb/xvfb-run.1.en.html . @Paul вы можете запустить его следующим образом:xvfb-run --server-args="-nolisten tcp -fbdir /var/run" python some-selenium.py
Как предположил @Gilles , более удобно работать по требованию, особенно когда вы используете его для тестирования Selenium. Вот пример команд оболочки:
Проверка отображения с использованием
xdpyinfo
before позволит убедиться, что вы не запустите виртуальный кадровый буфер дважды.Если вам действительно нужно запустить его при запуске, вы можете попробовать следующий скрипт init.d :
Источник: dloman / xvfb на GitHub (разветвленный от: jterrace / xvfb )
Сохраните его как
/etc/init.d/xvfb
и сделайте его исполняемым, затем запустите его как:Для автоматического запуска при запуске выполните:
Чтобы удалить его из автозапуска, запустите:
Также добавьте в
environment
файл для распознавания программами X, например:Вот версия для версии systemd: dloman / xvfb.service .
источник