Я пытаюсь настроить запуск сценария python каждые две минуты с помощью cronjob, строка crontab находится ниже. Сценарий python вызывается сценарием оболочки script.sh, размещенным ниже. Этот скрипт Python запускает веб-драйвер Selen, собирает некоторые данные и сохраняет их в CSV-файл. Фрагмент также ниже.
кронтаб
*/2 * * * * export DISPLAY=:0 && /home/me/workspace/project/script.sh > /home/me/workspace/project/cron.log 2>&1
Экспорт DISPLAY =: 0 необходим для запуска селена в cronjob, как видно здесь .
Этот бит (> /home/me/workspace/project/cron.log 2> & 1) регистрирует выходные данные и ошибки в файле cron.log.
script.sh
#!/bin/bash
python3 /home/me/workspace/project/foo.py
foo.py
from datetime import datetime
from selenium import webdriver
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()
with webdriver.Chrome() as driver:
#do some scraping and save to csv
pass
Когда я запускаю script.sh вручную, все работает без ошибок. Но когда я устанавливаю crontab, скрипт не работает. Файл cron.log показывает:
Traceback (most recent call last):
File "/home/me/workspace/project/foo.py", line 7, in <module>
from selenium import webdriver
ImportError: No module named 'selenium'
Это говорит о том, что селен не установлен, но замораживание pip3 | grep Селен дает:
$ pip3 freeze | grep selenium
selenium==3.13.0
Это показывает, что селен установлен (как и ожидалось, потому что скрипт работает нормально при запуске вручную). То же самое происходит с другой библиотекой, pyvirtualdisplay, если я закомментирую строку селен. Так что проблема в том, что по какой-то причине python не находит специально установленные модули при запуске через cronjob. Я уже пытался заменить 'python3' на '/ usr / bin / env python3' или '/ usr / bin / python3 'и другие его варианты, но безрезультатно.
Если бы кто-нибудь мог опубликовать намек на решение, я был бы благодарен.