LINUX.ORG.RU
решено ФорумAdmin

Cron не работает! Спасите, помогите!

 , , ,


0

2

Всем хорошего настроения и доброго дня! Написал скрипт на Python3 + selenium, который заходит на страницу и делает скриншот. Ставлю скрипт на Cron(* * * * * DISPLAY=:0 && cd /home/vladium && /usr/bin/python3 /home/vladium/main.py >> log 2> err) и пока я в терминале или по ssh, то все хорошо, Cron работает, но стоит мне выйти вылазит ошибка: selenium.common.exceptions.WebDriverException: Message: Service /usr/bin/chromedriver unexpectedly exited. Status code was: 1. Мне Вас рекомендовали как самый дружественный форум! Прошу помочь, если сталкивались. Спасибо за внимание!



Последнее исправление: vladium (всего исправлений: 2)

Ответ на: комментарий от papin-aziat

Бро, системД теперь навсегда, отбрось сомнения.

А ты не думал что помимо Linux есть ещё немало UNIX-like, где нет и никогда не будет (потому что cgroups2 это Linux-only фича, а systemd не только от них зависит) systemd?

Топикстартер не указал что у него Linux.

mord0d ★★★★★
()
DISPLAY=:0 && cd /home/vladium && strace -o /home/vladium/strace.out -ff -s 32768 /usr/bin/python3 /home/vladium/main.py >> log 2> err

Тоже самое под стрейсом запусти и потом в ~/strace.out.$PID можно будет почитать почему хромдрайвер вышел. И например сравнить две сессии - в которой он отработал и в которой вышел.

slowpony ★★★★★
()
Последнее исправление: slowpony (всего исправлений: 2)
Ответ на: комментарий от ya-betmen

Я может не правильно объяснил, но пока я вживую смотрю на терминал, то кронтаб работает, нет проблем. Выхожу и все пропало. Иногда вот такая команда(ssh -Y vladium@192.168.1.99 feh img.png) прокатывает, потому что в момент ее запуска включился крон, а ssh пусканул chromedriver. Но это надо угадать. А финальных 50+ штук, что показавать, ни один не работает

vladium
() автор топика
Ответ на: комментарий от vladium

Я пока что не понимаю как и что запускается в кроне. Сейчас выглядит так, что ты из под рута запускаешь скрипт который лезет в профиль юзера. Подозреваю он там хочет найти что-то, что там появляется только после логина.

ya-betmen ★★★★★
()
Ответ на: комментарий от futurama

очевидно что заглушка с дисплеем ноль не стекается через &&

в первом посте дали верную ссылку

DISPLAY=:0

30 * * * *  google-chrome
0  * * * *  python my_script.py

скорее всего так должно работать

Morin ★★★★
()
Ответ на: комментарий от ya-betmen

1: Питоша
vladium@u:~$ vi main.py
#!/usr/bin/python3
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

service = Service(«/usr/bin/chromedriver»)
options = webdriver.ChromeOptions()
options.headless = True
options.add_argument(‘–no-sandbox’)
driver = webdriver.Chrome(service=service, options=options)
driver.get(«https://time100.ru/Yekaterinburg»)
driver.save_screenshot(«/home/vladium/img.png»)
driver.close()
driver.quit()

2:Окружение
vladium@u:~$ env
SHELL=/bin/bash
PWD=/home/vladium
LOGNAME=vladium
XDG_SESSION_TYPE=tty
MOTD_SHOWN=pam
HOME=/home/vladium
SSH_CONNECTION=192.168.1.100 49653 192.168.1.99 22
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm-256color
LESSOPEN=| /usr/bin/lesspipe %s
USER=vladium
DISPLAY=localhost:10.0
SHLVL=1
XDG_SESSION_ID=5
XDG_RUNTIME_DIR=/run/user/1000
SSH_CLIENT=192.168.1.100 49653 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/home/vladium/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
SSH_TTY=/dev/pts/0
_=/usr/bin/env

3:Крон
vladium@u:~$ crontab -e
SHELL=/bin/bash
PATH=/home/vladium/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

          • DISPLAY=localhost:10.0 /usr/bin/python3 /home/vladium/main.py >> log 2>&1
vladium
() автор топика
Ответ на: комментарий от futurama

да это понятно, я уже и разжованое нашел

Of course, there will not be a running X session on :0 if you are not logged in to your desktop.
 A robust solution would start up a separate Xvfb server from your cron job, and then run Chrome within a new headless session.
Morin ★★★★
()
Последнее исправление: Morin (всего исправлений: 1)
Ответ на: комментарий от vladium

надо запустить виртуальные иксы и на них запустить твой скрипт

можно вообще все укатать в питон - https://stackoverflow.com/questions/21665914/installing-and-configuring-xvfb

смотри первый коммент

Morin ★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

в том же RHEL

Ну это такой себе показатель. В минимальной установке 8-ки полный фарш из легаси-софта (загляни, например, в /var/log, там ужас-ужас). Про 9-ку не скажу, пока не пробовал, а вот про свежую Федору было бы интересно узнать, есть ли там ещё крон по умолчанию.

papin-aziat ★★★★★
()
Ответ на: комментарий от papin-aziat

В минимальной установке 8-ки полный фарш из легаси-софта

То что Вы называете «legacy software» на самом деле довольно широко используется. И тот же cron в обозримом будущем никуда не денется.

bugfixer ★★★★★
()
Ответ на: комментарий от bugfixer

Недавно смотрел федору 36, зашёл в /var/log, ЕМНИП, и там лежит README, в котором сказано, что мол не пугайтесь, что нет привычных файлов, все это есть в journald, как-то так. Про крон не помню.

И тот же cron в обозримом будущем никуда не денется.

Посмотрим. Сейчас как-то смело отказываются от старого.

papin-aziat ★★★★★
()
Ответ на: комментарий от futurama

Привет ребятушки!
Ровно 7 дней, да не, даже целую неделю я пытался разобраться с этой бедой. В итоге решение нашел, но перед тем как опубликовать в шапке темы и на других ресурсах прошу Вас дать оценку…
Как я выяснил экспериментальным путем и с помощью Ваших подсказок, что cron срабатывает правильно, только когда находишься в терминале или через ssh. Даже виртуальный дисплей Xvfb не срабатывает, если добавить в crontab строку @reboot /usr/bin/Xvfb &, вернее он срабатывает и висит в htop, но без толку. Сделал запуск Xvfb через systemd, но результат тот-же.
В общем решение:
Копирую ключ ssh сам себе с помощью ssh-copy-id user@myselfserver и в crontab -e прописываю @reboot /usr/bin/sleep 15; ssh user@myselfserver Xvfb &, и это работает)).
Итоговый crontab выглядит так:

@reboot /usr/bin/sleep 15; ssh user@myselfserver Xvfb &
* * * * * cd /home/user/ && /usr/bin/python3 /home/user/script.py >> out.log 2>&1

Проверил на реальной машине, на виртуальной и на raspberry pi 4 - всё работает.
Отдельное спасибо @papin-aziat, я хоть с systemd разобрался немного.

vladium
() автор топика