2017-01-27 1 views
1

Я использую dryscrape в сценарии python. Сценарий python вызывается в сценарии bash, который запускается cron. Для тех, кто может не знать, dryscrape - это безгласный браузер (используйте QtWebkit в фоновом режиме, поэтому для него требуется xsession).Задача Cron не может запускать скрипт bash (который требует скрипт python, требующий xsession), который отлично работает с консоли

Вот основные моменты, касающиеся меня вопрос

  1. Когда я запускаю сценарий питона из командной строки, она работает
  2. Когда я запускаю Баш скрипт из командной строки, она работает слишком

я понял, что это может иметь что-то делать с различными средами между моей командной строкой и когда хроны работают, поэтому я изменил мой Баш скрипт на источник моего .profile следующим образом:

#/bin/bash 

. /full/path/to/my/home/directory/.profile 

python script_to_run.py 

Это то, что моя запись cronjob кронтаб выглядит следующим образом:

0,55 14-22 * * 1-5 /path/to/script.sh >> $(date "+/path/to/logs/\%Y\%m\%d.mydownload.log") 

Кстати, я знаю, что работа бежится (я могу видеть записи в/вар/Журнал/системный журнал, и сценарий также записывает в лог-файл - где я получаю сообщение об ошибке ниже):

Во всех случаях, я получил следующее сообщение об ошибке:

не удалось подключиться к серверу X. Попробуйте позвонить dryscrape.start_xvfb() перед созданием сеанса

Я установил предпосылки, на моей машине (очевидно - так как она работает в командной строке). На данный момент у меня заканчиваются идеи.

Что заставляет сценарий работать нормально на консоли, а затем сбой при запуске cron?

[[Соответствующие подробности]]

  • ОС: Linux 16.0.4 LTS
  • Баш: версия 4.3.46 (1)
  • хрон пользователя: сам (то есть тот же пользователь на командная строка)
  • dryscrape: версия 1.0.1
+0

Вы используете cronjob переменную 'DISPLAY' (или вы это делаете? .profile)? –

+0

Нет, я так не думаю. Пожалуйста, дополните ...Это похоже на проблему, с которой я раньше сталкивался с аналогичным проектом. Мне нужно добавить 'export DISPLAY =: 0' в мою запись crontab, прежде чем запускать команду? –

+0

Можете ли вы запустить его с терминала, который не находится в сеансе X окон? (ctrl + alt + 1, ctrl + alt + 6 или ctrl + alt + 7, чтобы вернуться в xwindows). Может быть, для сухой кожи нужна xsession). – ymmyk

ответ

0

Решение этого вопроса состояло в том, чтобы вызвать метод dryscrape.start_xvfb() перед началом сеанса сушки.

0

Крон пользователь не имеет дисплея, так что вы не можете запустить любой комлинк и который требует отображения. Вам нужно изменить скрипт python, чтобы не использовать какой-либо тип отображения (проверьте внимательно, потому что некоторые команды python, даже если они не открывают какой-либо дисплей, они внутренне проверяют эту переменную). Лучший способ проверить ssh в машине без дисплея и проверить, можете ли вы запустить его там без erros.

+0

см. Комментарии выше. Это может помочь прояснить ситуацию для вас. –

Смежные вопросы