PyAutoGUI в Cron Job

Я пытаюсь запустить программу, которая автоматизирует для меня открытие нескольких вкладок в python (3.6), используя Selenium и PyAutoGUI через crontab.

Вот сценарий, который я пытаюсь запустить, когда cron не запускает программу:

import pyautogui
import selenium
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("https://www.google.com")

Однако cron запустит программу, если я закомментирую первую строку:

#import pyautogui
import selenium
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("https://www.google.com")

Вот мой CronJob:

* * * * * export DISPLAY=:1 ; cd /root/testingDir ; sudo /usr/local/bin/python3 /root/testingDir/test.py

PyAutoGUI установлен в /usr/local/lib/python3.6/site-packages, и я попробовал трюк sys.path.append(), но это тоже не сработало.

Я в замешательстве, потому что кажется, что cron специально не импортирует pyautogui (я не сталкивался с этой проблемой ни с каким другим импортом. Есть мысли?


person apythonfrustration    schedule 26.09.2017    source источник
comment
Попробуйте отправить ошибку в такой файл: * * * * * sh script.sh >> results.log 2>&1   -  person joaquindev    schedule 06.02.2018


Ответы (1)


Я тоже столкнулся с этой проблемой. Вот как я это обошел (с помощью принятого ответа здесь). Суть в том, что несколько отсутствующих переменных среды cron присутствуют в переменных среды терминала. Сравните переменные среды в каждом контексте:

  1. Ввод env в терминал

  2. Создание задания cron, содержащего * * * * * env > /tmp/env.output, и проверка вывода

Я решил эту проблему, включив следующее в начало моего задания cron, которое содержало скрипт, вызывающий pyautogui:

DISPLAY=:0
XAUTHORITY=/run/user/1000/gdm/Xauthority
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/rm/Downloads/bin:/home/rm/.local/bin:/home/rm/bin:/home/rm/Downloads/bin
15 * * * * /usr/bin/python3 /home/user/<pyscript.py> 

Таким образом, минимальное подмножество переменных среды, которое должно присутствовать, выглядит следующим образом: DISPLAY, XAUTHORITY и PATH. (Я получил эти значения переменных, выполнив env в терминале)

person Ryan    schedule 09.03.2018