Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2024, 08:55   #1
omelsn@mail.ru
Пользователь
 
Регистрация: 27.03.2023
Сообщений: 22
По умолчанию Почему crontab не запускает код Python содержащий модули?

Добрый день помогите разобраться почему crontab
* * * * * /home/user/MyProger/venv3.10/bin/python3 /home/user/MyProger/main.py
не запускает код python
Код:
import cv2

video_capture = cv2.VideoCapture(0)

if not video_capture.isOpened():
    print("Cannot open url")
    exit()

while True:
    ret, frame = video_capture.read()
    
    if not ret:
        print("Can't receive frame. Exiting...")
        break

    cv2.imshow("Video", frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

video_capture.release()
cv2.destroyAllWindows()
Вот так через консоль все работает source /home/user/MyProger/venv3.10/bin/activate && python3 /home/user/MyProger/main.py, так же писал в crontab. Пробовал кроном запускать myscript.sh

#!/bin/bash

# Переход в директорию проекта
cd /home/user/MyProger

# Активация виртуалки
source /home/user/MyProger/venv3.10/bin/activate

# Выполнить скрипт Python
python3 /home/user/MyProger/main.py

Результат один и тот же лампочка камеры загорается и гаснет,

mail пишет
Return-Path:
X-Original-To: user
Delivered-To: user@user-HP-Laptop-15-bw0xx
Received: by user-HP-Laptop-15-bw0xx (Postfix, from userid 1000)
id 5DD32B4050F; Thu, 16 May 2024 14:54:01 +0600 (+06)
From: root@user-HP-Laptop-15-bw0xx (Cron Daemon)
To: user@user-HP-Laptop-15-bw0xx
Subject: Cron python3 /home/user/MyProger/main.py
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
Message-Id: <20240516085401.5DD32B4050F@user-HP-Laptop-15-bw0xx>
Date: Thu, 16 May 2024 14:54:01 +0600 (+06)
X-UID: 6
Status: R

Traceback (most recent call last):
File "/home/user/MyProger/main.py", line 1, in
import cv2
ModuleNotFoundError: No module named 'cv2'

cv2 стоит в нужной директории, при манипуляции командами activate и deactivate это видно
omelsn@mail.ru вне форума Ответить с цитированием
Старый 19.05.2024, 14:07   #2
DeepFlake
Пользователь
 
Регистрация: 16.05.2024
Сообщений: 13
По умолчанию

Через консоль вы запускаете Python, который установлен у вас в системе
Цитата:
Вот так через консоль все работает source /home/user/MyProger/venv3.10/bin/activate && python3 /home/user/MyProger/main.py
а в crontab'е запускается Python, который установлен в вашем личном каталоге.
В каком из них есть модуль cv2 ?
Какой Python используют activate и deactivate ?
DeepFlake вне форума Ответить с цитированием
Старый 22.05.2024, 11:18   #3
omelsn@mail.ru
Пользователь
 
Регистрация: 27.03.2023
Сообщений: 22
По умолчанию Здравствуйте

cv2 установлен и в venv3.10 и в venv3.11

вот bash скрипт

#!/bin/bash

# Переход в директорию проекта
cd /home/user/MyProger

# Активация виртуалки
. venv3.10/bin/activate

# Выполнить скрипт Python
python3 /home/user/MyProger/main.py

все работает, меняю на venv3.11 тоже работает

вот crontab

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
SHELL=/bin/bash
* * * * * /home/user/MyProger/myscript.sh

не работает
omelsn@mail.ru вне форума Ответить с цитированием
Старый 22.05.2024, 15:45   #4
DeepFlake
Пользователь
 
Регистрация: 16.05.2024
Сообщений: 13
По умолчанию

cron присылает письмо пользователю user, в котором говорится, что Python не видит модуль cv2:

Цитата:
From: root@user-HP-Laptop-15-bw0xx (Cron Daemon)
To: user@user-HP-Laptop-15-bw0xx
Subject: Cron python3 /home/user/MyProger/main.py

Traceback (most recent call last):
File "/home/user/MyProger/main.py", line 1, in
import cv2
ModuleNotFoundError: No module named 'cv2'
вот ведь где ошибка.

Цитата:
cv2 стоит в нужной директории
В какой?

Какой python3 вы вызываете в /home/user/MyProger/myscript.sh ?
Пишите там полный путь.
Насколько я понял у вас установлено несколько питонов и с ними у вас неразбериха.
DeepFlake вне форума Ответить с цитированием
Старый 22.05.2024, 18:42   #5
omelsn@mail.ru
Пользователь
 
Регистрация: 27.03.2023
Сообщений: 22
По умолчанию Добрый вечер

А как проверить какой питон запускает скрипт, или просто удалить версию питона и удалить venv3.11
omelsn@mail.ru вне форума Ответить с цитированием
Старый 22.05.2024, 19:09   #6
DeepFlake
Пользователь
 
Регистрация: 16.05.2024
Сообщений: 13
По умолчанию

Проверить какой Питон вызывается при запуске команды python3 можно командой
Код:
which python3
У меня вот так:
Код:
[zzz ~]$ which python3
/usr/bin/python3
[zzz ~]$
Вы в сценарии напишите полный путь к python3, например

Код:
/usr/bin/python3 /home/user/MyProger/main.py
А проверить виден ли Питону модуль cv2 можно так:
запускаете интерпретатор Питона в интерактивном режиме
и даёте ему команду
Код:
import cv2
и смотрите что он скажет.

На моём компьютере например вот так:
Код:
[zzz ~]$ /usr/bin/python3
Python 3.9.16 (main, Mar 21 2023, 10:12:38) 
[GCC 10.3.1 20210703 (ALT Sisyphus 10.3.1-alt2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cv2'
>>>
то есть на моём компьютере модуль cv2 не установлен. А у вас если тоже так же напишет - значит не установлен. Надо установить.
DeepFlake вне форума Ответить с цитированием
Старый 23.05.2024, 12:34   #7
omelsn@mail.ru
Пользователь
 
Регистрация: 27.03.2023
Сообщений: 22
По умолчанию Добрый день

Спасибо DeepFlake

Проверка питона показала

which python3
/usr/bin/python3
/usr/bin/python3
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cv2'
>>>

установил sudo apt install pip

потом установил cv2 в в /usr/bin/ командой pip install --target /usr/bin/ opencv-python правда пришлось sudo -su root правами

теперь пишет

xx:/usr/bin$ python3
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>>

Скопировал в sudo cp /home/user/MyProger/main.py /usr/bin

теперь командой в терминале :/usr/bin$ python3 main.py скрипт запускается

через bash

#!/bin/bash

# Переход в директорию проекта
cd /usr/bin/

# Активация виртуалки
#. venv3.10/bin/activate

# Выполнить скрипт Python
python3 main.py

тоже все работает

А ЧЕРЕЗ CRONTAB НЕЕТ

вот crontab

SHELL=/bin/bash
* * * * * /usr/bin/myscript.sh

вот mail ошибка

qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/usr/bin/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb.

/usr/bin/myscript.sh: строка 10: 16004 Аварийный останов (образ памяти сброшен на диск) python3 main.py
omelsn@mail.ru вне форума Ответить с цитированием
Старый 23.05.2024, 12:36   #8
omelsn@mail.ru
Пользователь
 
Регистрация: 27.03.2023
Сообщений: 22
По умолчанию ps

а может как то переменные окружения среды или оболочки прописать где нибудь вместо того чтобы в /usr/bin/ устанавливать модули python
omelsn@mail.ru вне форума Ответить с цитированием
Старый 23.05.2024, 12:55   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Цитата:
Сообщение от omelsn@mail.ru Посмотреть сообщение
чтобы в /usr/bin/ устанавливать модули python
Так и не надо в /usr/bin/ устанавливать. Ставили бы просто "python3 -m pip install opencv-python".
Цитата:
Сообщение от omelsn@mail.ru Посмотреть сообщение
qt.qpa.xcb: could not connect to display
Попробуйте в задачу добавить:
Код:
* * * * * export DISPLAY=:0 && /usr/bin/myscript.sh
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 23.05.2024, 13:11   #10
omelsn@mail.ru
Пользователь
 
Регистрация: 27.03.2023
Сообщений: 22
По умолчанию ans

сделал в crontab вот так

SHELL=/bin/bash
* * * * * export DISPLAY=:0 && /usr/bin/myscript.sh

ошибка та же индикатор камеры загорается и гаснет mail пишет

qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/usr/bin/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb.

/usr/bin/myscript.sh: строка 10: 5524 Аварийный останов (образ памяти сброшен на диск) python3 main.py
omelsn@mail.ru вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему меня пугает Python? Izobara Свободное общение 31 26.03.2013 07:16
не рабоатет crontab Brandan PHP 0 17.08.2012 21:56
А почему нет раздела Python? alex455 О форуме и сайтах клуба 6 20.02.2012 19:48
D2010. Почему в строке uses, если нажать ctrl+space будут видны не все модули? TwiX Свободное общение 0 15.03.2010 02:12
Почему не работают модули в Delphi7: DXClass, DXSprite, DXDraws, ExtCtrls, StdCtrls Mclaren Помощь студентам 3 02.05.2009 15:13